@elastic/search-ui
Advanced tools
Comparing version 0.2.1 to 0.3.0
@@ -9,1 +9,5 @@ ## 0.1.0 (January 3, 2019) | ||
that have been saved will be incompatible with this new version. | ||
## 0.3.0 (February 5, 2019) | ||
- Added a "reset" action |
@@ -202,2 +202,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } | ||
_defineProperty(this, "reset", function () { | ||
_this._setState(_this.startingState); | ||
}); | ||
_defineProperty(this, "removeFilter", function (name, value) { | ||
@@ -295,3 +299,7 @@ var filters = _this.state.filters; | ||
urlState = {}; | ||
} // We filter these here to disallow anything other than valid search | ||
} // Remember the state this application is initialized into, so that we can | ||
// reset to it later. | ||
this.startingState = _objectSpread({}, this.state, initialState); // We filter these here to disallow anything other than valid search | ||
// parameters to be passed in initial state, or url state. `results`, etc, | ||
@@ -301,4 +309,3 @@ // should not be allowed to be passed in, that should be generated based on | ||
var searchParameters = filterSearchParameters(_objectSpread({}, this.state, initialState, urlState)); // Initialize the state without calling _setState, because we don't | ||
var searchParameters = filterSearchParameters(_objectSpread({}, this.startingState, urlState)); // Initialize the state without calling _setState, because we don't | ||
// want to trigger an update callback, we're just initializing the state | ||
@@ -428,2 +435,3 @@ // to the correct default values for the initial UI render | ||
removeFilter: this.removeFilter, | ||
reset: this.reset, | ||
setFilter: this.setFilter, | ||
@@ -466,2 +474,2 @@ setResultsPerPage: this.setResultsPerPage, | ||
export { SearchDriver as default }; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiVVJMTWFuYWdlciIsImZpbHRlclNlYXJjaFBhcmFtZXRlcnMiLCJjdXJyZW50IiwiZmlsdGVycyIsInJlc3VsdHNQZXJQYWdlIiwic2VhcmNoVGVybSIsInNvcnREaXJlY3Rpb24iLCJzb3J0RmllbGQiLCJyZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZSIsIm5hbWUiLCJ2YWx1ZSIsInJlZHVjZSIsImFjYyIsImZpbHRlciIsImN1cnJlbnRGaWx0ZXJWYWx1ZXMiLCJ1cGRhdGVkRmlsdGVyVmFsdWVzIiwiZmlsdGVyVmFsdWUiLCJtYXRjaEZpbHRlciIsImxlbmd0aCIsImNvbmNhdCIsIkRFRkFVTFRfU1RBVEUiLCJlcnJvciIsImlzTG9hZGluZyIsImZhY2V0cyIsInJlcXVlc3RJZCIsInJlc3VsdHMiLCJyZXN1bHRTZWFyY2hUZXJtIiwidG90YWxQYWdlcyIsInRvdGFsUmVzdWx0cyIsIndhc1NlYXJjaGVkIiwiZm9ybWF0T1JGaWx0ZXJzQXNBTkQiLCJPYmplY3QiLCJrZXlzIiwidmFsdWVzIiwibWFwIiwidiIsInJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzIiwiY29uZGl0aW9uYWxGYWNldHMiLCJlbnRyaWVzIiwiZmFjZXRLZXkiLCJmYWNldCIsImZpbHRlcjEiLCJmaWx0ZXIyIiwiZnJvbSIsInRvIiwiU2VhcmNoRHJpdmVyIiwiYXBpQ29ubmVjdG9yIiwiZGlzanVuY3RpdmVGYWNldHMiLCJkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MiLCJpbml0aWFsU3RhdGUiLCJyZXN1bHRfZmllbGRzIiwic2VhcmNoX2ZpZWxkcyIsInRyYWNrVXJsU3RhdGUiLCJzdGF0ZSIsImV4aXN0aW5nRmlsdGVyVmFsdWVzIiwiZmluZCIsImYiLCJuZXdGaWx0ZXJWYWx1ZXMiLCJleGlzdGluZyIsImZpbHRlcnNXaXRob3V0VGFyZ2V0RmlsdGVyIiwiX3VwZGF0ZVNlYXJjaFJlc3VsdHMiLCJ1cGRhdGVkRmlsdGVycyIsImV4Y2VwdCIsImZpbHRlckZpZWxkIiwiaW5jbHVkZXMiLCJkb2N1bWVudElkIiwidGFncyIsImNsaWNrIiwicXVlcnkiLCJFcnJvciIsInN1YnNjcmlwdGlvbnMiLCJ1cmxTdGF0ZSIsImdldFN0YXRlRnJvbVVSTCIsIm9uVVJMU3RhdGVDaGFuZ2UiLCJzZWFyY2hQYXJhbWV0ZXJzIiwic2tpcFB1c2hUb1VybCIsInNlYXJjaE9wdGlvbnMiLCJhbGwiLCJwYWdlIiwic2l6ZSIsInNvcnQiLCJfc2V0U3RhdGUiLCJzZWFyY2giLCJ0aGVuIiwicmVzdWx0TGlzdCIsImluZm8iLCJtZXRhIiwicmVxdWVzdF9pZCIsInRvdGFsX3BhZ2VzIiwidG90YWxfcmVzdWx0cyIsInB1c2hTdGF0ZVRvVVJMIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJuZXdTdGF0ZSIsImZvckVhY2giLCJzdWJzY3JpcHRpb24iLCJvblN0YXRlQ2hhbmdlIiwicHVzaCIsImFkZEZpbHRlciIsImNsZWFyRmlsdGVycyIsInJlbW92ZUZpbHRlciIsInNldEZpbHRlciIsInNldFJlc3VsdHNQZXJQYWdlIiwic2V0U2VhcmNoVGVybSIsInNldFNvcnQiLCJzZXRDdXJyZW50IiwidHJhY2tDbGlja1Rocm91Z2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsVUFBUCxNQUF1QixjQUF2Qjs7QUFFQSxTQUFTQyxzQkFBVCxPQU9HO0FBQUEsTUFOREMsT0FNQyxRQU5EQSxPQU1DO0FBQUEsTUFMREMsT0FLQyxRQUxEQSxPQUtDO0FBQUEsTUFKREMsY0FJQyxRQUpEQSxjQUlDO0FBQUEsTUFIREMsVUFHQyxRQUhEQSxVQUdDO0FBQUEsTUFGREMsYUFFQyxRQUZEQSxhQUVDO0FBQUEsTUFEREMsU0FDQyxRQUREQSxTQUNDO0FBQ0QsU0FBTztBQUNMTCxJQUFBQSxPQUFPLEVBQVBBLE9BREs7QUFFTEMsSUFBQUEsT0FBTyxFQUFQQSxPQUZLO0FBR0xDLElBQUFBLGNBQWMsRUFBZEEsY0FISztBQUlMQyxJQUFBQSxVQUFVLEVBQVZBLFVBSks7QUFLTEMsSUFBQUEsYUFBYSxFQUFiQSxhQUxLO0FBTUxDLElBQUFBLFNBQVMsRUFBVEE7QUFOSyxHQUFQO0FBUUQ7O0FBRUQsU0FBU0MsdUJBQVQsQ0FBaUNMLE9BQWpDLEVBQTBDTSxJQUExQyxFQUFnREMsS0FBaEQsRUFBdUQ7QUFDckQsU0FBT1AsT0FBTyxDQUFDUSxNQUFSLENBQWUsVUFBQ0MsR0FBRCxFQUFNQyxNQUFOLEVBQWlCO0FBQ3JDLFFBQUlBLE1BQU0sQ0FBQ0osSUFBRCxDQUFWLEVBQWtCO0FBQ2hCLFVBQU1LLG1CQUFtQixHQUFHRCxNQUFNLENBQUNKLElBQUQsQ0FBbEM7QUFDQSxVQUFNTSxtQkFBbUIsR0FBR0QsbUJBQW1CLENBQUNELE1BQXBCLENBQzFCLFVBQUFHLFdBQVc7QUFBQSxlQUFJLENBQUNDLFdBQVcsQ0FBQ0QsV0FBRCxFQUFjTixLQUFkLENBQWhCO0FBQUEsT0FEZSxDQUE1Qjs7QUFHQSxVQUFJSyxtQkFBbUIsQ0FBQ0csTUFBcEIsR0FBNkIsQ0FBakMsRUFBb0M7QUFDbEMsZUFBT04sR0FBRyxDQUFDTyxNQUFKLHFCQUNKVixJQURJLEVBQ0dNLG1CQURILEVBQVA7QUFHRCxPQUpELE1BSU87QUFDTCxlQUFPSCxHQUFQO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPQSxHQUFHLENBQUNPLE1BQUosQ0FBV04sTUFBWCxDQUFQO0FBQ0QsR0FmTSxFQWVKLEVBZkksQ0FBUDtBQWdCRDs7QUFFRCxPQUFPLElBQU1PLGFBQWEsR0FBRztBQUMzQjtBQUNBbEIsRUFBQUEsT0FBTyxFQUFFLENBRmtCO0FBRzNCQyxFQUFBQSxPQUFPLEVBQUUsRUFIa0I7QUFJM0JDLEVBQUFBLGNBQWMsRUFBRSxFQUpXO0FBSzNCQyxFQUFBQSxVQUFVLEVBQUUsRUFMZTtBQU0zQkMsRUFBQUEsYUFBYSxFQUFFLEVBTlk7QUFPM0JDLEVBQUFBLFNBQVMsRUFBRSxFQVBnQjtBQVEzQjtBQUNBO0FBQ0FjLEVBQUFBLEtBQUssRUFBRSxFQVZvQjtBQVczQkMsRUFBQUEsU0FBUyxFQUFFLEtBWGdCO0FBWTNCQyxFQUFBQSxNQUFNLEVBQUUsRUFabUI7QUFhM0JDLEVBQUFBLFNBQVMsRUFBRSxFQWJnQjtBQWMzQkMsRUFBQUEsT0FBTyxFQUFFLEVBZGtCO0FBZTNCQyxFQUFBQSxnQkFBZ0IsRUFBRSxFQWZTO0FBZ0IzQkMsRUFBQUEsVUFBVSxFQUFFLENBaEJlO0FBaUIzQkMsRUFBQUEsWUFBWSxFQUFFLENBakJhO0FBa0IzQkMsRUFBQUEsV0FBVyxFQUFFO0FBbEJjLENBQXRCO0FBcUJQOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCQSxTQUFTQyxvQkFBVCxHQUE0QztBQUFBLE1BQWQzQixPQUFjLHVFQUFKLEVBQUk7QUFDMUMsU0FBT0EsT0FBTyxDQUFDUSxNQUFSLENBQWUsVUFBQ0MsR0FBRCxFQUFNQyxNQUFOLEVBQWlCO0FBQ3JDLFFBQU1KLElBQUksR0FBR3NCLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbkIsTUFBWixFQUFvQixDQUFwQixDQUFiO0FBQ0EsUUFBTW9CLE1BQU0sR0FBR0YsTUFBTSxDQUFDRSxNQUFQLENBQWNwQixNQUFkLEVBQXNCLENBQXRCLENBQWY7QUFDQSxXQUFPRCxHQUFHLENBQUNPLE1BQUosQ0FBV2MsTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFBQUMsQ0FBQztBQUFBLGlDQUFRMUIsSUFBUixFQUFlMEIsQ0FBZjtBQUFBLEtBQVosQ0FBWCxDQUFQO0FBQ0QsR0FKTSxFQUlKLEVBSkksQ0FBUDtBQUtEOztBQUVELFNBQVNDLHVCQUFULEdBSUU7QUFBQSxNQUhBYixNQUdBLHVFQUhTLEVBR1Q7QUFBQSxNQUZBYyxpQkFFQSx1RUFGb0IsRUFFcEI7QUFBQSxNQURBbEMsT0FDQSx1RUFEVSxFQUNWO0FBQ0EsU0FBTzRCLE1BQU0sQ0FBQ08sT0FBUCxDQUFlZixNQUFmLEVBQXVCWixNQUF2QixDQUE4QixVQUFDQyxHQUFELFNBQTRCO0FBQUE7QUFBQSxRQUFyQjJCLFFBQXFCO0FBQUEsUUFBWEMsS0FBVzs7QUFDL0QsUUFDRUgsaUJBQWlCLENBQUNFLFFBQUQsQ0FBakIsSUFDQSxPQUFPRixpQkFBaUIsQ0FBQ0UsUUFBRCxDQUF4QixLQUF1QyxVQUR2QyxJQUVBLENBQUNGLGlCQUFpQixDQUFDRSxRQUFELENBQWpCLENBQTRCO0FBQUVwQyxNQUFBQSxPQUFPLEVBQVBBO0FBQUYsS0FBNUIsQ0FISCxFQUlFO0FBQ0EsYUFBT1MsR0FBUDtBQUNEOztBQUVEQSxJQUFBQSxHQUFHLENBQUMyQixRQUFELENBQUgsR0FBZ0JDLEtBQWhCO0FBQ0EsV0FBTzVCLEdBQVA7QUFDRCxHQVhNLEVBV0osRUFYSSxDQUFQO0FBWUQ7O0FBRUQsU0FBU0ssV0FBVCxDQUFxQndCLE9BQXJCLEVBQThCQyxPQUE5QixFQUF1QztBQUNyQyxTQUNFRCxPQUFPLEtBQUtDLE9BQVosSUFDQ0QsT0FBTyxDQUFDRSxJQUFSLElBQ0NGLE9BQU8sQ0FBQ0UsSUFBUixLQUFpQkQsT0FBTyxDQUFDQyxJQUQxQixJQUVDRixPQUFPLENBQUNHLEVBRlQsSUFHQ0gsT0FBTyxDQUFDRyxFQUFSLEtBQWVGLE9BQU8sQ0FBQ0UsRUFMM0I7QUFPRDtBQUVEOzs7Ozs7SUFJcUJDLFk7OztBQUduQiwrQkFVRztBQUFBOztBQUFBLFFBVERDLFlBU0MsU0FUREEsWUFTQztBQUFBLFFBUkRULGlCQVFDLFNBUkRBLGlCQVFDO0FBQUEsUUFQRFUsaUJBT0MsU0FQREEsaUJBT0M7QUFBQSxRQU5EQyw4QkFNQyxTQU5EQSw4QkFNQztBQUFBLFFBTER6QixNQUtDLFNBTERBLE1BS0M7QUFBQSxRQUpEMEIsWUFJQyxTQUpEQSxZQUlDO0FBQUEsUUFIREMsYUFHQyxTQUhEQSxhQUdDO0FBQUEsUUFGREMsYUFFQyxTQUZEQSxhQUVDO0FBQUEsb0NBRERDLGFBQ0M7QUFBQSxRQUREQSxhQUNDLG9DQURlLElBQ2Y7O0FBQUE7O0FBQUEsbUNBWktoQyxhQVlMOztBQUFBLHVDQStMUyxVQUFDWCxJQUFELEVBQU9DLEtBQVAsRUFBaUI7QUFBQSxVQUNuQlAsT0FEbUIsR0FDUCxLQUFJLENBQUNrRCxLQURFLENBQ25CbEQsT0FEbUI7QUFHM0IsVUFBTW1ELG9CQUFvQixHQUFHLENBQUNuRCxPQUFPLENBQUNvRCxJQUFSLENBQWEsVUFBQUMsQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQy9DLElBQUQsQ0FBTDtBQUFBLE9BQWQsS0FBOEIsRUFBL0IsRUFBbUNBLElBQW5DLEtBQTRDLEVBQXpFO0FBRUEsVUFBTWdELGVBQWUsR0FBR0gsb0JBQW9CLENBQUNDLElBQXJCLENBQTBCLFVBQUFHLFFBQVE7QUFBQSxlQUN4RHpDLFdBQVcsQ0FBQ3lDLFFBQUQsRUFBV2hELEtBQVgsQ0FENkM7QUFBQSxPQUFsQyxJQUdwQjRDLG9CQUhvQixHQUlwQkEsb0JBQW9CLENBQUNuQyxNQUFyQixDQUE0QlQsS0FBNUIsQ0FKSjtBQU1BLFVBQU1pRCwwQkFBMEIsR0FBR3hELE9BQU8sQ0FBQ1UsTUFBUixDQUFlLFVBQUEyQyxDQUFDO0FBQUEsZUFBSSxDQUFDQSxDQUFDLENBQUMvQyxJQUFELENBQU47QUFBQSxPQUFoQixDQUFuQzs7QUFFQSxNQUFBLEtBQUksQ0FBQ21ELG9CQUFMLENBQTBCO0FBQ3hCMUQsUUFBQUEsT0FBTyxFQUFFLENBRGU7QUFFeEJDLFFBQUFBLE9BQU8scUJBQU13RCwwQkFBTiw4QkFBcUNsRCxJQUFyQyxFQUE0Q2dELGVBQTVDO0FBRmlCLE9BQTFCO0FBSUQsS0FoTkU7O0FBQUEsdUNBME5TLFVBQUNoRCxJQUFELEVBQU9DLEtBQVAsRUFBaUI7QUFBQSxVQUNyQlAsT0FEcUIsR0FDVCxLQUFJLENBQUNrRCxLQURJLENBQ3JCbEQsT0FEcUI7QUFFM0JBLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDVSxNQUFSLENBQWUsVUFBQUEsTUFBTTtBQUFBLGVBQUlrQixNQUFNLENBQUNDLElBQVAsQ0FBWW5CLE1BQVosRUFBb0IsQ0FBcEIsTUFBMkJKLElBQS9CO0FBQUEsT0FBckIsQ0FBVjs7QUFFQSxNQUFBLEtBQUksQ0FBQ21ELG9CQUFMLENBQTBCO0FBQ3hCMUQsUUFBQUEsT0FBTyxFQUFFLENBRGU7QUFFeEJDLFFBQUFBLE9BQU8scUJBQU1BLE9BQU4sOEJBQWtCTSxJQUFsQixFQUF5QixDQUFDQyxLQUFELENBQXpCO0FBRmlCLE9BQTFCO0FBSUQsS0FsT0U7O0FBQUEsMENBNE9ZLFVBQUNELElBQUQsRUFBT0MsS0FBUCxFQUFpQjtBQUFBLFVBQ3RCUCxPQURzQixHQUNWLEtBQUksQ0FBQ2tELEtBREssQ0FDdEJsRCxPQURzQjtBQUc5QixVQUFNMEQsY0FBYyxHQUFHbkQsS0FBSyxHQUN4QkYsdUJBQXVCLENBQUNMLE9BQUQsRUFBVU0sSUFBVixFQUFnQkMsS0FBaEIsQ0FEQyxHQUV4QlAsT0FBTyxDQUFDVSxNQUFSLENBQWUsVUFBQUEsTUFBTTtBQUFBLGVBQUksQ0FBQ0EsTUFBTSxDQUFDSixJQUFELENBQVg7QUFBQSxPQUFyQixDQUZKOztBQUlBLE1BQUEsS0FBSSxDQUFDbUQsb0JBQUwsQ0FBMEI7QUFDeEIxRCxRQUFBQSxPQUFPLEVBQUUsQ0FEZTtBQUV4QkMsUUFBQUEsT0FBTyxFQUFFMEQ7QUFGZSxPQUExQjtBQUlELEtBdlBFOztBQUFBLDBDQWdRWSxZQUFpQjtBQUFBLFVBQWhCQyxNQUFnQix1RUFBUCxFQUFPO0FBQUEsVUFDdEIzRCxPQURzQixHQUNWLEtBQUksQ0FBQ2tELEtBREssQ0FDdEJsRCxPQURzQjtBQUc5QixVQUFNMEQsY0FBYyxHQUFHMUQsT0FBTyxDQUFDVSxNQUFSLENBQWUsVUFBQUEsTUFBTSxFQUFJO0FBQzlDLFlBQU1rRCxXQUFXLEdBQUdoQyxNQUFNLENBQUNDLElBQVAsQ0FBWW5CLE1BQVosRUFBb0IsQ0FBcEIsQ0FBcEI7QUFDQSxlQUFPaUQsTUFBTSxDQUFDRSxRQUFQLENBQWdCRCxXQUFoQixDQUFQO0FBQ0QsT0FIc0IsQ0FBdkI7O0FBS0EsTUFBQSxLQUFJLENBQUNILG9CQUFMLENBQTBCO0FBQ3hCMUQsUUFBQUEsT0FBTyxFQUFFLENBRGU7QUFFeEJDLFFBQUFBLE9BQU8sRUFBRTBEO0FBRmUsT0FBMUI7QUFJRCxLQTVRRTs7QUFBQSwrQ0FxUmlCLFVBQUF6RCxjQUFjLEVBQUk7QUFDcEMsTUFBQSxLQUFJLENBQUN3RCxvQkFBTCxDQUEwQjtBQUN4QjFELFFBQUFBLE9BQU8sRUFBRSxDQURlO0FBRXhCRSxRQUFBQSxjQUFjLEVBQWRBO0FBRndCLE9BQTFCO0FBSUQsS0ExUkU7O0FBQUEsMkNBbVNhLFVBQUFDLFVBQVUsRUFBSTtBQUM1QixNQUFBLEtBQUksQ0FBQ3VELG9CQUFMLENBQTBCO0FBQ3hCMUQsUUFBQUEsT0FBTyxFQUFFLENBRGU7QUFFeEJDLFFBQUFBLE9BQU8sRUFBRSxFQUZlO0FBR3hCRSxRQUFBQSxVQUFVLEVBQVZBO0FBSHdCLE9BQTFCO0FBS0QsS0F6U0U7O0FBQUEscUNBbVRPLFVBQUNFLFNBQUQsRUFBWUQsYUFBWixFQUE4QjtBQUN0QyxNQUFBLEtBQUksQ0FBQ3NELG9CQUFMLENBQTBCO0FBQ3hCMUQsUUFBQUEsT0FBTyxFQUFFLENBRGU7QUFFeEJJLFFBQUFBLGFBQWEsRUFBYkEsYUFGd0I7QUFHeEJDLFFBQUFBLFNBQVMsRUFBVEE7QUFId0IsT0FBMUI7QUFLRCxLQXpURTs7QUFBQSx3Q0FrVVUsVUFBQUwsT0FBTyxFQUFJO0FBQ3RCLE1BQUEsS0FBSSxDQUFDMEQsb0JBQUwsQ0FBMEI7QUFDeEIxRCxRQUFBQSxPQUFPLEVBQVBBO0FBRHdCLE9BQTFCO0FBR0QsS0F0VUU7O0FBQUEsK0NBa1ZpQixVQUFDK0QsVUFBRCxFQUEyQjtBQUFBLFVBQWRDLElBQWMsdUVBQVAsRUFBTztBQUFBLHdCQUNYLEtBQUksQ0FBQ2IsS0FETTtBQUFBLFVBQ3JDN0IsU0FEcUMsZUFDckNBLFNBRHFDO0FBQUEsVUFDMUJuQixVQUQwQixlQUMxQkEsVUFEMEI7O0FBRzdDLE1BQUEsS0FBSSxDQUFDeUMsWUFBTCxDQUFrQnFCLEtBQWxCLENBQXdCO0FBQ3RCQyxRQUFBQSxLQUFLLEVBQUUvRCxVQURlO0FBRXRCNEQsUUFBQUEsVUFBVSxFQUFWQSxVQUZzQjtBQUd0QnpDLFFBQUFBLFNBQVMsRUFBVEEsU0FIc0I7QUFJdEIwQyxRQUFBQSxJQUFJLEVBQUpBO0FBSnNCLE9BQXhCO0FBTUQsS0EzVkU7O0FBQ0QsUUFBSSxDQUFDcEIsWUFBTCxFQUFtQjtBQUNqQixZQUFNdUIsS0FBSyxDQUFDLHVCQUFELENBQVg7QUFDRDs7QUFDRCxTQUFLdkIsWUFBTCxHQUFvQkEsWUFBcEI7QUFDQSxTQUFLVCxpQkFBTCxHQUF5QkEsaUJBQXpCO0FBQ0EsU0FBS1UsaUJBQUwsR0FBeUJBLGlCQUF6QjtBQUNBLFNBQUtDLDhCQUFMLEdBQXNDQSw4QkFBdEM7QUFDQSxTQUFLekIsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBSzJCLGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQkEsYUFBckI7QUFDQSxTQUFLbUIsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFNBQUtsQixhQUFMLEdBQXFCQSxhQUFyQjtBQUVBLFFBQUltQixRQUFKOztBQUNBLFFBQUluQixhQUFKLEVBQW1CO0FBQ2pCLFdBQUtwRCxVQUFMLEdBQWtCLElBQUlBLFVBQUosRUFBbEI7QUFDQXVFLE1BQUFBLFFBQVEsR0FBRyxLQUFLdkUsVUFBTCxDQUFnQndFLGVBQWhCLEVBQVg7QUFDQSxXQUFLeEUsVUFBTCxDQUFnQnlFLGdCQUFoQixDQUFpQyxVQUFBRixRQUFRLEVBQUk7QUFDM0MsUUFBQSxLQUFJLENBQUNYLG9CQUFMLG1CQUErQnhDLGFBQS9CLEVBQWlEbUQsUUFBakQsR0FBNkQsSUFBN0Q7QUFDRCxPQUZEO0FBR0QsS0FORCxNQU1PO0FBQ0xBLE1BQUFBLFFBQVEsR0FBRyxFQUFYO0FBQ0QsS0F2QkEsQ0F5QkQ7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFFBQU1HLGdCQUFnQixHQUFHekUsc0JBQXNCLG1CQUMxQyxLQUFLb0QsS0FEcUMsRUFFMUNKLFlBRjBDLEVBRzFDc0IsUUFIMEMsRUFBL0MsQ0E3QkMsQ0FtQ0Q7QUFDQTtBQUNBOztBQUNBLFNBQUtsQixLQUFMLHFCQUNLLEtBQUtBLEtBRFYsRUFFS3FCLGdCQUZMLEVBdENDLENBMkNEO0FBQ0E7QUFDQTs7QUFDQSxRQUFJQSxnQkFBZ0IsQ0FBQ3JFLFVBQWpCLElBQStCcUUsZ0JBQWdCLENBQUN2RSxPQUFqQixDQUF5QmUsTUFBekIsR0FBa0MsQ0FBckUsRUFBd0U7QUFDdEUsV0FBSzBDLG9CQUFMLENBQTBCYyxnQkFBMUI7QUFDRDtBQUNGOzs7O3lDQUVvQkEsZ0IsRUFBeUM7QUFBQTs7QUFBQSxVQUF2QkMsYUFBdUIsdUVBQVAsS0FBTzs7QUFBQSxvREFVdkQsS0FBS3RCLEtBVmtELEVBV3ZEcUIsZ0JBWHVEO0FBQUEsVUFFMUR4RSxPQUYwRCx5QkFFMURBLE9BRjBEO0FBQUEsVUFHMURDLE9BSDBELHlCQUcxREEsT0FIMEQ7QUFBQSxVQUkxRG1CLFNBSjBELHlCQUkxREEsU0FKMEQ7QUFBQSxVQUsxRGxCLGNBTDBELHlCQUsxREEsY0FMMEQ7QUFBQSxVQU0xREMsVUFOMEQseUJBTTFEQSxVQU4wRDtBQUFBLFVBTzFEQyxhQVAwRCx5QkFPMURBLGFBUDBEO0FBQUEsVUFRMURDLFNBUjBELHlCQVExREEsU0FSMEQ7O0FBYzVELFVBQUllLFNBQUosRUFBZTtBQUVmLFVBQU1zRCxhQUFhLEdBQUc7QUFDcEI3QixRQUFBQSxpQkFBaUIsRUFBRSxLQUFLQSxpQkFESjtBQUVwQkMsUUFBQUEsOEJBQThCLEVBQUUsS0FBS0EsOEJBRmpCO0FBR3BCekIsUUFBQUEsTUFBTSxFQUFFYSx1QkFBdUIsQ0FDN0IsS0FBS2IsTUFEd0IsRUFFN0IsS0FBS2MsaUJBRndCLEVBRzdCbEMsT0FINkIsQ0FIWDtBQVFwQkEsUUFBQUEsT0FBTyxFQUFFO0FBQ1AwRSxVQUFBQSxHQUFHLEVBQUUvQyxvQkFBb0IsQ0FBQzNCLE9BQUQ7QUFEbEIsU0FSVztBQVdwQjJFLFFBQUFBLElBQUksRUFBRTtBQUNKNUUsVUFBQUEsT0FBTyxFQUFQQSxPQURJO0FBRUo2RSxVQUFBQSxJQUFJLEVBQUUzRTtBQUZGLFNBWGM7QUFlcEI4QyxRQUFBQSxhQUFhLEVBQUUsS0FBS0EsYUFmQTtBQWdCcEJDLFFBQUFBLGFBQWEsRUFBRSxLQUFLQTtBQWhCQSxPQUF0Qjs7QUFtQkEsVUFBSTVDLFNBQVMsSUFBSUQsYUFBakIsRUFBZ0M7QUFDOUJzRSxRQUFBQSxhQUFhLENBQUNJLElBQWQsdUJBQ0d6RSxTQURILEVBQ2VELGFBRGY7QUFHRDs7QUFFRCxXQUFLMkUsU0FBTCxDQUFlO0FBQ2IvRSxRQUFBQSxPQUFPLEVBQVBBLE9BRGE7QUFFYm1CLFFBQUFBLEtBQUssRUFBRSxFQUZNO0FBR2JsQixRQUFBQSxPQUFPLEVBQVBBLE9BSGE7QUFJYm1CLFFBQUFBLFNBQVMsRUFBRSxJQUpFO0FBS2JsQixRQUFBQSxjQUFjLEVBQWRBLGNBTGE7QUFNYkMsUUFBQUEsVUFBVSxFQUFWQSxVQU5hO0FBT2JDLFFBQUFBLGFBQWEsRUFBYkEsYUFQYTtBQVFiQyxRQUFBQSxTQUFTLEVBQVRBO0FBUmEsT0FBZjs7QUFXQSxhQUFPLEtBQUt1QyxZQUFMLENBQWtCb0MsTUFBbEIsQ0FBeUI3RSxVQUF6QixFQUFxQ3VFLGFBQXJDLEVBQW9ETyxJQUFwRCxDQUNMLFVBQUFDLFVBQVUsRUFBSTtBQUNaLFFBQUEsTUFBSSxDQUFDSCxTQUFMLENBQWU7QUFDYjFELFVBQUFBLE1BQU0sRUFBRTZELFVBQVUsQ0FBQ0MsSUFBWCxDQUFnQjlELE1BQWhCLElBQTBCLEVBRHJCO0FBRWJELFVBQUFBLFNBQVMsRUFBRSxLQUZFO0FBR2JFLFVBQUFBLFNBQVMsRUFBRTRELFVBQVUsQ0FBQ0MsSUFBWCxDQUFnQkMsSUFBaEIsQ0FBcUJDLFVBSG5CO0FBSWI5RCxVQUFBQSxPQUFPLEVBQUUyRCxVQUFVLENBQUMzRCxPQUpQO0FBS2JDLFVBQUFBLGdCQUFnQixFQUFFckIsVUFMTDtBQU1ic0IsVUFBQUEsVUFBVSxFQUFFeUQsVUFBVSxDQUFDQyxJQUFYLENBQWdCQyxJQUFoQixDQUFxQlIsSUFBckIsQ0FBMEJVLFdBTnpCO0FBT2I1RCxVQUFBQSxZQUFZLEVBQUV3RCxVQUFVLENBQUNDLElBQVgsQ0FBZ0JDLElBQWhCLENBQXFCUixJQUFyQixDQUEwQlcsYUFQM0I7QUFRYjVELFVBQUFBLFdBQVcsRUFBRTtBQVJBLFNBQWY7O0FBV0EsWUFBSSxDQUFDOEMsYUFBRCxJQUFrQixNQUFJLENBQUN2QixhQUEzQixFQUEwQztBQUN4QyxVQUFBLE1BQUksQ0FBQ3BELFVBQUwsQ0FBZ0IwRixjQUFoQixDQUErQjtBQUM3QnhGLFlBQUFBLE9BQU8sRUFBUEEsT0FENkI7QUFFN0JDLFlBQUFBLE9BQU8sRUFBUEEsT0FGNkI7QUFHN0JDLFlBQUFBLGNBQWMsRUFBZEEsY0FINkI7QUFJN0JDLFlBQUFBLFVBQVUsRUFBVkEsVUFKNkI7QUFLN0JDLFlBQUFBLGFBQWEsRUFBYkEsYUFMNkI7QUFNN0JDLFlBQUFBLFNBQVMsRUFBVEE7QUFONkIsV0FBL0I7QUFRRDtBQUNGLE9BdkJJLEVBd0JMLFVBQUFjLEtBQUssRUFBSTtBQUNQc0UsUUFBQUEsT0FBTyxDQUFDdEUsS0FBUixDQUFjQSxLQUFkOztBQUNBLFFBQUEsTUFBSSxDQUFDNEQsU0FBTCxDQUFlO0FBQ2I1RCxVQUFBQSxLQUFLLDBDQUFtQ0EsS0FBSyxDQUFDdUUsT0FBekM7QUFEUSxTQUFmO0FBR0QsT0E3QkksQ0FBUDtBQStCRDs7OzhCQUVTQyxRLEVBQVU7QUFDbEIsVUFBTXhDLEtBQUsscUJBQVEsS0FBS0EsS0FBYixFQUF1QndDLFFBQXZCLENBQVg7O0FBQ0EsV0FBS3ZCLGFBQUwsQ0FBbUJ3QixPQUFuQixDQUEyQixVQUFBQyxZQUFZO0FBQUEsZUFBSUEsWUFBWSxDQUFDMUMsS0FBRCxDQUFoQjtBQUFBLE9BQXZDO0FBQ0EsV0FBS0EsS0FBTCxHQUFhQSxLQUFiO0FBQ0Q7QUFFRDs7Ozs7Ozs7OzRDQU13QjJDLGEsRUFBZTtBQUNyQyxXQUFLMUIsYUFBTCxDQUFtQjJCLElBQW5CLENBQXdCRCxhQUF4QjtBQUNEO0FBRUQ7Ozs7Ozs7O2lDQUthO0FBQ1gsYUFBTztBQUNMRSxRQUFBQSxTQUFTLEVBQUUsS0FBS0EsU0FEWDtBQUVMQyxRQUFBQSxZQUFZLEVBQUUsS0FBS0EsWUFGZDtBQUdMQyxRQUFBQSxZQUFZLEVBQUUsS0FBS0EsWUFIZDtBQUlMQyxRQUFBQSxTQUFTLEVBQUUsS0FBS0EsU0FKWDtBQUtMQyxRQUFBQSxpQkFBaUIsRUFBRSxLQUFLQSxpQkFMbkI7QUFNTEMsUUFBQUEsYUFBYSxFQUFFLEtBQUtBLGFBTmY7QUFPTEMsUUFBQUEsT0FBTyxFQUFFLEtBQUtBLE9BUFQ7QUFRTEMsUUFBQUEsVUFBVSxFQUFFLEtBQUtBLFVBUlo7QUFTTEMsUUFBQUEsaUJBQWlCLEVBQUUsS0FBS0E7QUFUbkIsT0FBUDtBQVdEO0FBRUQ7Ozs7Ozs7OzsrQkFNVztBQUNUO0FBQ0E7QUFDQSwrQkFBWSxLQUFLckQsS0FBakI7QUFDRDtBQUVEOzs7Ozs7Ozs7Ozs7OztTQXBNbUJSLFkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVVJMTWFuYWdlciBmcm9tIFwiLi9VUkxNYW5hZ2VyXCI7XG5cbmZ1bmN0aW9uIGZpbHRlclNlYXJjaFBhcmFtZXRlcnMoe1xuICBjdXJyZW50LFxuICBmaWx0ZXJzLFxuICByZXN1bHRzUGVyUGFnZSxcbiAgc2VhcmNoVGVybSxcbiAgc29ydERpcmVjdGlvbixcbiAgc29ydEZpZWxkXG59KSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudCxcbiAgICBmaWx0ZXJzLFxuICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgIHNlYXJjaFRlcm0sXG4gICAgc29ydERpcmVjdGlvbixcbiAgICBzb3J0RmllbGRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2luZ2xlRmlsdGVyVmFsdWUoZmlsdGVycywgbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZpbHRlcnMucmVkdWNlKChhY2MsIGZpbHRlcikgPT4ge1xuICAgIGlmIChmaWx0ZXJbbmFtZV0pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJWYWx1ZXMgPSBmaWx0ZXJbbmFtZV07XG4gICAgICBjb25zdCB1cGRhdGVkRmlsdGVyVmFsdWVzID0gY3VycmVudEZpbHRlclZhbHVlcy5maWx0ZXIoXG4gICAgICAgIGZpbHRlclZhbHVlID0+ICFtYXRjaEZpbHRlcihmaWx0ZXJWYWx1ZSwgdmFsdWUpXG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXJWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdCh7XG4gICAgICAgICAgW25hbWVdOiB1cGRhdGVkRmlsdGVyVmFsdWVzXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZmlsdGVyKTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEFURSA9IHtcbiAgLy8gU2VhcmNoIFBhcmFtZXRlcnMgLS0gVGhpcyBpcyBzdGF0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGlucHV0IHN0YXRlLlxuICBjdXJyZW50OiAxLFxuICBmaWx0ZXJzOiBbXSxcbiAgcmVzdWx0c1BlclBhZ2U6IDIwLFxuICBzZWFyY2hUZXJtOiBcIlwiLFxuICBzb3J0RGlyZWN0aW9uOiBcIlwiLFxuICBzb3J0RmllbGQ6IFwiXCIsXG4gIC8vIFJlc3VsdCBTdGF0ZSAtLSBUaGlzIHN0YXRlIHJlcHJlc2VudHMgc3RhdGUgdGhhdCBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbiAgLy8gYXMgdGhlIHJlc3VsdCBvZiBjaGFuZ2luZyBpbnB1dCBzdGF0ZS5cbiAgZXJyb3I6IFwiXCIsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGZhY2V0czoge30sXG4gIHJlcXVlc3RJZDogXCJcIixcbiAgcmVzdWx0czogW10sXG4gIHJlc3VsdFNlYXJjaFRlcm06IFwiXCIsXG4gIHRvdGFsUGFnZXM6IDAsXG4gIHRvdGFsUmVzdWx0czogMCxcbiAgd2FzU2VhcmNoZWQ6IGZhbHNlXG59O1xuXG4vKlxuICogVGhpcyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGZpbHRlcmluZy5cbiAqIE91ciBkYXRhIHN0cnVjdHVyZSBmb3IgZmlsdGVycyBhcmUgdGhlIFwiT1JcIiBmb3JtYXQgZm9yIHRoZSBBcHAgU2VhcmNoXG4gKiBBUEk6XG4gKlxuICogIGBgYFxuICogIGZpbHRlcnM6IHtcbiAqICAgYWxsOiBbXG4gKiAgICB7YXV0aG9yOiBbXCJDbGludG9uXCIsIFwiU2hheVwiXX1cbiAqICAgXVxuICogIH1cbiAqICBgYGBcbiAqXG4gKiBIb3dldmVyLCB0aGUgaW50ZW50IGlzIGZvciB0aGVtIHRvIGJlIEFORCBmaWx0ZXJzLiBTbyB3ZSBuZWVkXG4gKiB0byBkbyBhIHF1aWNrIGNoYW5nZSBpbiBmb3JtYXR0aW5nIGJlZm9yZSBhcHBseWluZyB0aGVtLlxuICpcbiAqICBgYGBcbiAqICAgZmlsdGVyczoge1xuICogICAgYWxsOiBbXG4gKiAgICAge2F1dGhvcjogXCJDbGludG9uXCJ9LFxuICogICAgIHthdXRob3I6IFwiU2hheVwifVxuICogICAgXVxuICogICB9XG4gKiAgYGBgXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdE9SRmlsdGVyc0FzQU5EKGZpbHRlcnMgPSBbXSkge1xuICByZXR1cm4gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IE9iamVjdC5rZXlzKGZpbHRlcilbMF07XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXIpWzBdO1xuICAgIHJldHVybiBhY2MuY29uY2F0KHZhbHVlcy5tYXAodiA9PiAoeyBbbmFtZV06IHYgfSkpKTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb25kaXRpb25hbEZhY2V0cyhcbiAgZmFjZXRzID0ge30sXG4gIGNvbmRpdGlvbmFsRmFjZXRzID0ge30sXG4gIGZpbHRlcnMgPSBbXVxuKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhmYWNldHMpLnJlZHVjZSgoYWNjLCBbZmFjZXRLZXksIGZhY2V0XSkgPT4ge1xuICAgIGlmIChcbiAgICAgIGNvbmRpdGlvbmFsRmFjZXRzW2ZhY2V0S2V5XSAmJlxuICAgICAgdHlwZW9mIGNvbmRpdGlvbmFsRmFjZXRzW2ZhY2V0S2V5XSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAhY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldKHsgZmlsdGVycyB9KVxuICAgICkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBhY2NbZmFjZXRLZXldID0gZmFjZXQ7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBtYXRjaEZpbHRlcihmaWx0ZXIxLCBmaWx0ZXIyKSB7XG4gIHJldHVybiAoXG4gICAgZmlsdGVyMSA9PT0gZmlsdGVyMiB8fFxuICAgIChmaWx0ZXIxLmZyb20gJiZcbiAgICAgIGZpbHRlcjEuZnJvbSA9PT0gZmlsdGVyMi5mcm9tICYmXG4gICAgICBmaWx0ZXIxLnRvICYmXG4gICAgICBmaWx0ZXIxLnRvID09PSBmaWx0ZXIyLnRvKVxuICApO1xufVxuXG4vKlxuICogVGhlIERyaXZlciBpcyBhIGZyYW1ld29yayBhZ25vc3RpYyBzZWFyY2ggc3RhdGUgbWFuYWdlciB0aGF0IGlzIGNhcGFibGVcbiAqIHN5bmNpbmcgc3RhdGUgdG8gdGhlIHVybC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoRHJpdmVyIHtcbiAgc3RhdGUgPSBERUZBVUxUX1NUQVRFO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBhcGlDb25uZWN0b3IsXG4gICAgY29uZGl0aW9uYWxGYWNldHMsXG4gICAgZGlzanVuY3RpdmVGYWNldHMsXG4gICAgZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzLFxuICAgIGZhY2V0cyxcbiAgICBpbml0aWFsU3RhdGUsXG4gICAgcmVzdWx0X2ZpZWxkcyxcbiAgICBzZWFyY2hfZmllbGRzLFxuICAgIHRyYWNrVXJsU3RhdGUgPSB0cnVlXG4gIH0pIHtcbiAgICBpZiAoIWFwaUNvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgRXJyb3IoXCJhcGlDb25uZWN0b3IgcmVxdWlyZWRcIik7XG4gICAgfVxuICAgIHRoaXMuYXBpQ29ubmVjdG9yID0gYXBpQ29ubmVjdG9yO1xuICAgIHRoaXMuY29uZGl0aW9uYWxGYWNldHMgPSBjb25kaXRpb25hbEZhY2V0cztcbiAgICB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzID0gZGlzanVuY3RpdmVGYWNldHM7XG4gICAgdGhpcy5kaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MgPSBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3M7XG4gICAgdGhpcy5mYWNldHMgPSBmYWNldHM7XG4gICAgdGhpcy5yZXN1bHRfZmllbGRzID0gcmVzdWx0X2ZpZWxkcztcbiAgICB0aGlzLnNlYXJjaF9maWVsZHMgPSBzZWFyY2hfZmllbGRzO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIHRoaXMudHJhY2tVcmxTdGF0ZSA9IHRyYWNrVXJsU3RhdGU7XG5cbiAgICBsZXQgdXJsU3RhdGU7XG4gICAgaWYgKHRyYWNrVXJsU3RhdGUpIHtcbiAgICAgIHRoaXMuVVJMTWFuYWdlciA9IG5ldyBVUkxNYW5hZ2VyKCk7XG4gICAgICB1cmxTdGF0ZSA9IHRoaXMuVVJMTWFuYWdlci5nZXRTdGF0ZUZyb21VUkwoKTtcbiAgICAgIHRoaXMuVVJMTWFuYWdlci5vblVSTFN0YXRlQ2hhbmdlKHVybFN0YXRlID0+IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7IC4uLkRFRkFVTFRfU1RBVEUsIC4uLnVybFN0YXRlIH0sIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybFN0YXRlID0ge307XG4gICAgfVxuXG4gICAgLy8gV2UgZmlsdGVyIHRoZXNlIGhlcmUgdG8gZGlzYWxsb3cgYW55dGhpbmcgb3RoZXIgdGhhbiB2YWxpZCBzZWFyY2hcbiAgICAvLyBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBpbiBpbml0aWFsIHN0YXRlLCBvciB1cmwgc3RhdGUuIGByZXN1bHRzYCwgZXRjLFxuICAgIC8vIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBiZSBwYXNzZWQgaW4sIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCBiYXNlZCBvblxuICAgIC8vIHRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeVxuICAgIGNvbnN0IHNlYXJjaFBhcmFtZXRlcnMgPSBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgICAuLi51cmxTdGF0ZVxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aG91dCBjYWxsaW5nIF9zZXRTdGF0ZSwgYmVjYXVzZSB3ZSBkb24ndFxuICAgIC8vIHdhbnQgdG8gdHJpZ2dlciBhbiB1cGRhdGUgY2FsbGJhY2ssIHdlJ3JlIGp1c3QgaW5pdGlhbGl6aW5nIHRoZSBzdGF0ZVxuICAgIC8vIHRvIHRoZSBjb3JyZWN0IGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgaW5pdGlhbCBVSSByZW5kZXJcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIC4uLnNlYXJjaFBhcmFtZXRlcnNcbiAgICB9O1xuXG4gICAgLy8gV2UnbGwgdHJpZ2dlciBhbiBpbml0aWFsIHNlYXJjaCBpZiBpbml0aWFsIHBhcmFtZXRlcnMgY29udGFpblxuICAgIC8vIGEgc2VhcmNoIHRlcm0gb3IgZmlsdGVycywgb3RoZXJ3aXNlLCB3ZSdsbCBqdXN0IHNhdmUgdGhlaXIgc2VsZWN0aW9uc1xuICAgIC8vIGluIHN0YXRlIGFzIGluaXRpYWwgdmFsdWVzLlxuICAgIGlmIChzZWFyY2hQYXJhbWV0ZXJzLnNlYXJjaFRlcm0gfHwgc2VhcmNoUGFyYW1ldGVycy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoc2VhcmNoUGFyYW1ldGVycyk7XG4gICAgfVxuICB9XG5cbiAgX3VwZGF0ZVNlYXJjaFJlc3VsdHMoc2VhcmNoUGFyYW1ldGVycywgc2tpcFB1c2hUb1VybCA9IGZhbHNlKSB7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudCxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICByZXN1bHRzUGVyUGFnZSxcbiAgICAgIHNlYXJjaFRlcm0sXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgc29ydEZpZWxkXG4gICAgfSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5zZWFyY2hQYXJhbWV0ZXJzXG4gICAgfTtcblxuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSB7XG4gICAgICBkaXNqdW5jdGl2ZUZhY2V0czogdGhpcy5kaXNqdW5jdGl2ZUZhY2V0cyxcbiAgICAgIGRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFnczogdGhpcy5kaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MsXG4gICAgICBmYWNldHM6IHJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzKFxuICAgICAgICB0aGlzLmZhY2V0cyxcbiAgICAgICAgdGhpcy5jb25kaXRpb25hbEZhY2V0cyxcbiAgICAgICAgZmlsdGVyc1xuICAgICAgKSxcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgYWxsOiBmb3JtYXRPUkZpbHRlcnNBc0FORChmaWx0ZXJzKVxuICAgICAgfSxcbiAgICAgIHBhZ2U6IHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgc2l6ZTogcmVzdWx0c1BlclBhZ2VcbiAgICAgIH0sXG4gICAgICByZXN1bHRfZmllbGRzOiB0aGlzLnJlc3VsdF9maWVsZHMsXG4gICAgICBzZWFyY2hfZmllbGRzOiB0aGlzLnNlYXJjaF9maWVsZHNcbiAgICB9O1xuXG4gICAgaWYgKHNvcnRGaWVsZCAmJiBzb3J0RGlyZWN0aW9uKSB7XG4gICAgICBzZWFyY2hPcHRpb25zLnNvcnQgPSB7XG4gICAgICAgIFtzb3J0RmllbGRdOiBzb3J0RGlyZWN0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBlcnJvcjogXCJcIixcbiAgICAgIGZpbHRlcnMsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICByZXN1bHRzUGVyUGFnZSxcbiAgICAgIHNlYXJjaFRlcm0sXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgc29ydEZpZWxkXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlDb25uZWN0b3Iuc2VhcmNoKHNlYXJjaFRlcm0sIHNlYXJjaE9wdGlvbnMpLnRoZW4oXG4gICAgICByZXN1bHRMaXN0ID0+IHtcbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgICAgIGZhY2V0czogcmVzdWx0TGlzdC5pbmZvLmZhY2V0cyB8fCB7fSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVzdWx0TGlzdC5pbmZvLm1ldGEucmVxdWVzdF9pZCxcbiAgICAgICAgICByZXN1bHRzOiByZXN1bHRMaXN0LnJlc3VsdHMsXG4gICAgICAgICAgcmVzdWx0U2VhcmNoVGVybTogc2VhcmNoVGVybSxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiByZXN1bHRMaXN0LmluZm8ubWV0YS5wYWdlLnRvdGFsX3BhZ2VzLFxuICAgICAgICAgIHRvdGFsUmVzdWx0czogcmVzdWx0TGlzdC5pbmZvLm1ldGEucGFnZS50b3RhbF9yZXN1bHRzLFxuICAgICAgICAgIHdhc1NlYXJjaGVkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghc2tpcFB1c2hUb1VybCAmJiB0aGlzLnRyYWNrVXJsU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLlVSTE1hbmFnZXIucHVzaFN0YXRlVG9VUkwoe1xuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICByZXN1bHRzUGVyUGFnZSxcbiAgICAgICAgICAgIHNlYXJjaFRlcm0sXG4gICAgICAgICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgc29ydEZpZWxkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICAgICAgZXJyb3I6IGBBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgX3NldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLnRoaXMuc3RhdGUsIC4uLm5ld1N0YXRlIH07XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbihzdGF0ZSkpO1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgdGltZSBzdGF0ZSBpcyB1cGRhdGVkIGluIHRoaXMgRHJpdmVyLCB0aGUgcHJvdmlkZWQgY2FsbGJhY2tcbiAgICogd2lsbCBiZSBleGVjdXRlZCB3aXRoIHRoZSB1cGRhdGVkIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0gb25TdGF0ZUNoYW5nZSBGdW5jdGlvblxuICAgKi9cbiAgc3Vic2NyaWJlVG9TdGF0ZUNoYW5nZXMob25TdGF0ZUNoYW5nZSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKG9uU3RhdGVDaGFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgYXZhaWxhYmxlIGFjaXRvbnNcbiAgICpcbiAgICogQHJldHVybnMgT2JqZWN0IEFsbCBhY3Rpb25zXG4gICAqL1xuICBnZXRBY3Rpb25zKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRGaWx0ZXI6IHRoaXMuYWRkRmlsdGVyLFxuICAgICAgY2xlYXJGaWx0ZXJzOiB0aGlzLmNsZWFyRmlsdGVycyxcbiAgICAgIHJlbW92ZUZpbHRlcjogdGhpcy5yZW1vdmVGaWx0ZXIsXG4gICAgICBzZXRGaWx0ZXI6IHRoaXMuc2V0RmlsdGVyLFxuICAgICAgc2V0UmVzdWx0c1BlclBhZ2U6IHRoaXMuc2V0UmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZXRTZWFyY2hUZXJtOiB0aGlzLnNldFNlYXJjaFRlcm0sXG4gICAgICBzZXRTb3J0OiB0aGlzLnNldFNvcnQsXG4gICAgICBzZXRDdXJyZW50OiB0aGlzLnNldEN1cnJlbnQsXG4gICAgICB0cmFja0NsaWNrVGhyb3VnaDogdGhpcy50cmFja0NsaWNrVGhyb3VnaFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgY3VycmVudCBzdGF0ZS4gVHlwaWNhbGx5IHVzZWQgb24gYXBwIGluaXRpYWxpemF0aW9uLiBTdWJzZXF1ZW50XG4gICAqIHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGNvbWUgdGhyb3VnaCBzdWJzY3JpcHRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBDdXJyZW50IHN0YXRlXG4gICAqL1xuICBnZXRTdGF0ZSgpIHtcbiAgICAvLyBXZSByZXR1cm4gYSBjb3B5IG9mIHN0YXRlIGhlcmUsIGJlY2F1c2Ugd2Ugd2FudCB0byBlbnN1cmUgdGhlIHN0YXRlXG4gICAgLy8gaW5zaWRlIG9mIHRoaXMgb2JqZWN0IHJlbWFpbnMgaW1tdXRhYmxlLlxuICAgIHJldHVybiB7IC4uLnRoaXMuc3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgcmVzdWx0cyAtIEFkZHMgdG8gY3VycmVudCBmaWx0ZXIgdmFsdWVcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgU3RyaW5nIGZpZWxkIG5hbWUgdG8gZmlsdGVyIG9uXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgZmllbGQgdmFsdWUgdG8gZmlsdGVyIG9uXG4gICAqL1xuICBhZGRGaWx0ZXIgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBjb25zdCBleGlzdGluZ0ZpbHRlclZhbHVlcyA9IChmaWx0ZXJzLmZpbmQoZiA9PiBmW25hbWVdKSB8fCB7fSlbbmFtZV0gfHwgW107XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZXMgPSBleGlzdGluZ0ZpbHRlclZhbHVlcy5maW5kKGV4aXN0aW5nID0+XG4gICAgICBtYXRjaEZpbHRlcihleGlzdGluZywgdmFsdWUpXG4gICAgKVxuICAgICAgPyBleGlzdGluZ0ZpbHRlclZhbHVlc1xuICAgICAgOiBleGlzdGluZ0ZpbHRlclZhbHVlcy5jb25jYXQodmFsdWUpO1xuXG4gICAgY29uc3QgZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIgPSBmaWx0ZXJzLmZpbHRlcihmID0+ICFmW25hbWVdKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzV2l0aG91dFRhcmdldEZpbHRlciwgeyBbbmFtZV06IG5ld0ZpbHRlclZhbHVlcyB9XVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgcmVzdWx0cyAtIFJlcGxhY2VzIGN1cnJlbnQgZmlsdGVyIHZhbHVlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIHRvIGZpbHRlciBvblxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIGZpZWxkIHZhbHVlIHRvIGZpbHRlciBvblxuICAgKi9cbiAgc2V0RmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgbGV0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBmaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IE9iamVjdC5rZXlzKGZpbHRlcilbMF0gIT09IG5hbWUpO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnMsIHsgW25hbWVdOiBbdmFsdWVdIH1dXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmaWx0ZXIgZnJvbSByZXN1bHRzXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIGZvciBmaWx0ZXIgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgKE9wdGlvbmFsKSBmaWVsZCB2YWx1ZSBmb3IgZmlsdGVyIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlRmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSB2YWx1ZVxuICAgICAgPyByZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZShmaWx0ZXJzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIDogZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICFmaWx0ZXJbbmFtZV0pO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnNcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBmaWx0ZXJzXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBleGNlcHQgQXJyYXlbU3RyaW5nXSBmaWVsZCBuYW1lIG9mIGFueSBmaWx0ZXJzIHRoYXQgc2hvdWxkIHJlbWFpblxuICAgKi9cbiAgY2xlYXJGaWx0ZXJzID0gKGV4Y2VwdCA9IFtdKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyRmllbGQgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgICAgcmV0dXJuIGV4Y2VwdC5pbmNsdWRlcyhmaWx0ZXJGaWVsZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVyc1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHJlc3VsdHNQZXJQYWdlIEludGVnZXJcbiAgICovXG4gIHNldFJlc3VsdHNQZXJQYWdlID0gcmVzdWx0c1BlclBhZ2UgPT4ge1xuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIHJlc3VsdHNQZXJQYWdlXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBzZWFyY2ggdGVybVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gc2VhcmNoVGVybSBTdHJpbmdcbiAgICovXG4gIHNldFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgIHNlYXJjaFRlcm1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IHNvcnRcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHNvcnRGaWVsZCBTdHJpbmdcbiAgICogQHBhcmFtIHNvcnREaXJlY3Rpb24gU3RyaW5nIFtcImFzY1wifFwiZGVzY1wiXVxuICAgKi9cbiAgc2V0U29ydCA9IChzb3J0RmllbGQsIHNvcnREaXJlY3Rpb24pID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgc29ydEZpZWxkXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBwYWdlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50IEludGVnZXJcbiAgICovXG4gIHNldEN1cnJlbnQgPSBjdXJyZW50ID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnRcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVwb3J0IGEgY2xpY2sgdGhyb3VnaCBldmVudC4gQSBjbGljayB0aHJvdWdoIGV2ZW50IGlzIHdoZW4gYSB1c2VyXG4gICAqIGNsaWNrcyBvbiBhIHJlc3VsdCBsaW5rLiBDbGljayBldmVudHMgY2FuIGJlIHJldmlld2VkIGluIHRoZSBBcHAgU2VhcmNoXG4gICAqIEFuYWx5dGljcyBEYXNoYm9hcmQuXG4gICAqXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIFN0cmluZyBUaGUgZG9jdW1lbnQgSUQgYXNzb2NpYXRlZCB3aXRoIHJlc3VsdCB0aGF0IHdhc1xuICAgKiBjbGlja2VkXG4gICAqIEBwYXJhbSB0YWcgQXJyYXlbU3RyaW5nXSBPcHRpb25hbCBUYWdzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhdGVnb3JpemVcbiAgICogdGhpcyBjbGljayBldmVudFxuICAgKi9cbiAgdHJhY2tDbGlja1Rocm91Z2ggPSAoZG9jdW1lbnRJZCwgdGFncyA9IFtdKSA9PiB7XG4gICAgY29uc3QgeyByZXF1ZXN0SWQsIHNlYXJjaFRlcm0gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICB0aGlzLmFwaUNvbm5lY3Rvci5jbGljayh7XG4gICAgICBxdWVyeTogc2VhcmNoVGVybSxcbiAgICAgIGRvY3VtZW50SWQsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgICB0YWdzXG4gICAgfSk7XG4gIH07XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiVVJMTWFuYWdlciIsImZpbHRlclNlYXJjaFBhcmFtZXRlcnMiLCJjdXJyZW50IiwiZmlsdGVycyIsInJlc3VsdHNQZXJQYWdlIiwic2VhcmNoVGVybSIsInNvcnREaXJlY3Rpb24iLCJzb3J0RmllbGQiLCJyZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZSIsIm5hbWUiLCJ2YWx1ZSIsInJlZHVjZSIsImFjYyIsImZpbHRlciIsImN1cnJlbnRGaWx0ZXJWYWx1ZXMiLCJ1cGRhdGVkRmlsdGVyVmFsdWVzIiwiZmlsdGVyVmFsdWUiLCJtYXRjaEZpbHRlciIsImxlbmd0aCIsImNvbmNhdCIsIkRFRkFVTFRfU1RBVEUiLCJlcnJvciIsImlzTG9hZGluZyIsImZhY2V0cyIsInJlcXVlc3RJZCIsInJlc3VsdHMiLCJyZXN1bHRTZWFyY2hUZXJtIiwidG90YWxQYWdlcyIsInRvdGFsUmVzdWx0cyIsIndhc1NlYXJjaGVkIiwiZm9ybWF0T1JGaWx0ZXJzQXNBTkQiLCJPYmplY3QiLCJrZXlzIiwidmFsdWVzIiwibWFwIiwidiIsInJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzIiwiY29uZGl0aW9uYWxGYWNldHMiLCJlbnRyaWVzIiwiZmFjZXRLZXkiLCJmYWNldCIsImZpbHRlcjEiLCJmaWx0ZXIyIiwiZnJvbSIsInRvIiwiU2VhcmNoRHJpdmVyIiwiYXBpQ29ubmVjdG9yIiwiZGlzanVuY3RpdmVGYWNldHMiLCJkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MiLCJpbml0aWFsU3RhdGUiLCJyZXN1bHRfZmllbGRzIiwic2VhcmNoX2ZpZWxkcyIsInRyYWNrVXJsU3RhdGUiLCJzdGF0ZSIsImV4aXN0aW5nRmlsdGVyVmFsdWVzIiwiZmluZCIsImYiLCJuZXdGaWx0ZXJWYWx1ZXMiLCJleGlzdGluZyIsImZpbHRlcnNXaXRob3V0VGFyZ2V0RmlsdGVyIiwiX3VwZGF0ZVNlYXJjaFJlc3VsdHMiLCJfc2V0U3RhdGUiLCJzdGFydGluZ1N0YXRlIiwidXBkYXRlZEZpbHRlcnMiLCJleGNlcHQiLCJmaWx0ZXJGaWVsZCIsImluY2x1ZGVzIiwiZG9jdW1lbnRJZCIsInRhZ3MiLCJjbGljayIsInF1ZXJ5IiwiRXJyb3IiLCJzdWJzY3JpcHRpb25zIiwidXJsU3RhdGUiLCJnZXRTdGF0ZUZyb21VUkwiLCJvblVSTFN0YXRlQ2hhbmdlIiwic2VhcmNoUGFyYW1ldGVycyIsInNraXBQdXNoVG9VcmwiLCJzZWFyY2hPcHRpb25zIiwiYWxsIiwicGFnZSIsInNpemUiLCJzb3J0Iiwic2VhcmNoIiwidGhlbiIsInJlc3VsdExpc3QiLCJpbmZvIiwibWV0YSIsInJlcXVlc3RfaWQiLCJ0b3RhbF9wYWdlcyIsInRvdGFsX3Jlc3VsdHMiLCJwdXNoU3RhdGVUb1VSTCIsImNvbnNvbGUiLCJtZXNzYWdlIiwibmV3U3RhdGUiLCJmb3JFYWNoIiwic3Vic2NyaXB0aW9uIiwib25TdGF0ZUNoYW5nZSIsInB1c2giLCJhZGRGaWx0ZXIiLCJjbGVhckZpbHRlcnMiLCJyZW1vdmVGaWx0ZXIiLCJyZXNldCIsInNldEZpbHRlciIsInNldFJlc3VsdHNQZXJQYWdlIiwic2V0U2VhcmNoVGVybSIsInNldFNvcnQiLCJzZXRDdXJyZW50IiwidHJhY2tDbGlja1Rocm91Z2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsVUFBUCxNQUF1QixjQUF2Qjs7QUFFQSxTQUFTQyxzQkFBVCxPQU9HO0FBQUEsTUFOREMsT0FNQyxRQU5EQSxPQU1DO0FBQUEsTUFMREMsT0FLQyxRQUxEQSxPQUtDO0FBQUEsTUFKREMsY0FJQyxRQUpEQSxjQUlDO0FBQUEsTUFIREMsVUFHQyxRQUhEQSxVQUdDO0FBQUEsTUFGREMsYUFFQyxRQUZEQSxhQUVDO0FBQUEsTUFEREMsU0FDQyxRQUREQSxTQUNDO0FBQ0QsU0FBTztBQUNMTCxJQUFBQSxPQUFPLEVBQVBBLE9BREs7QUFFTEMsSUFBQUEsT0FBTyxFQUFQQSxPQUZLO0FB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QUFDRDtBQUVEOzs7Ozs7OztpQ0FLYTtBQUNYLGFBQU87QUFDTEUsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBRFg7QUFFTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBRmQ7QUFHTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBSGQ7QUFJTEMsUUFBQUEsS0FBSyxFQUFFLEtBQUtBLEtBSlA7QUFLTEMsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBTFg7QUFNTEMsUUFBQUEsaUJBQWlCLEVBQUUsS0FBS0EsaUJBTm5CO0FBT0xDLFFBQUFBLGFBQWEsRUFBRSxLQUFLQSxhQVBmO0FBUUxDLFFBQUFBLE9BQU8sRUFBRSxLQUFLQSxPQVJUO0FBU0xDLFFBQUFBLFVBQVUsRUFBRSxLQUFLQSxVQVRaO0FBVUxDLFFBQUFBLGlCQUFpQixFQUFFLEtBQUtBO0FBVm5CLE9BQVA7QUFZRDtBQUVEOzs7Ozs7Ozs7K0JBTVc7QUFDVDtBQUNBO0FBQ0EsK0JBQVksS0FBS3ZELEtBQWpCO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7U0EzTW1CUixZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFVSTE1hbmFnZXIgZnJvbSBcIi4vVVJMTWFuYWdlclwiO1xuXG5mdW5jdGlvbiBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgY3VycmVudCxcbiAgZmlsdGVycyxcbiAgcmVzdWx0c1BlclBhZ2UsXG4gIHNlYXJjaFRlcm0sXG4gIHNvcnREaXJlY3Rpb24sXG4gIHNvcnRGaWVsZFxufSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQsXG4gICAgZmlsdGVycyxcbiAgICByZXN1bHRzUGVyUGFnZSxcbiAgICBzZWFyY2hUZXJtLFxuICAgIHNvcnREaXJlY3Rpb24sXG4gICAgc29ydEZpZWxkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZUZpbHRlclZhbHVlKGZpbHRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICBpZiAoZmlsdGVyW25hbWVdKSB7XG4gICAgICBjb25zdCBjdXJyZW50RmlsdGVyVmFsdWVzID0gZmlsdGVyW25hbWVdO1xuICAgICAgY29uc3QgdXBkYXRlZEZpbHRlclZhbHVlcyA9IGN1cnJlbnRGaWx0ZXJWYWx1ZXMuZmlsdGVyKFxuICAgICAgICBmaWx0ZXJWYWx1ZSA9PiAhbWF0Y2hGaWx0ZXIoZmlsdGVyVmFsdWUsIHZhbHVlKVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoe1xuICAgICAgICAgIFtuYW1lXTogdXBkYXRlZEZpbHRlclZhbHVlc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2MuY29uY2F0KGZpbHRlcik7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RBVEUgPSB7XG4gIC8vIFNlYXJjaCBQYXJhbWV0ZXJzIC0tIFRoaXMgaXMgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZSBpbnB1dCBzdGF0ZS5cbiAgY3VycmVudDogMSxcbiAgZmlsdGVyczogW10sXG4gIHJlc3VsdHNQZXJQYWdlOiAyMCxcbiAgc2VhcmNoVGVybTogXCJcIixcbiAgc29ydERpcmVjdGlvbjogXCJcIixcbiAgc29ydEZpZWxkOiBcIlwiLFxuICAvLyBSZXN1bHQgU3RhdGUgLS0gVGhpcyBzdGF0ZSByZXByZXNlbnRzIHN0YXRlIHRoYXQgaXMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5XG4gIC8vIGFzIHRoZSByZXN1bHQgb2YgY2hhbmdpbmcgaW5wdXQgc3RhdGUuXG4gIGVycm9yOiBcIlwiLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBmYWNldHM6IHt9LFxuICByZXF1ZXN0SWQ6IFwiXCIsXG4gIHJlc3VsdHM6IFtdLFxuICByZXN1bHRTZWFyY2hUZXJtOiBcIlwiLFxuICB0b3RhbFBhZ2VzOiAwLFxuICB0b3RhbFJlc3VsdHM6IDAsXG4gIHdhc1NlYXJjaGVkOiBmYWxzZVxufTtcblxuLypcbiAqIFRoaXMgZml4ZXMgYW4gaXNzdWUgd2l0aCBmaWx0ZXJpbmcuXG4gKiBPdXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIGZpbHRlcnMgYXJlIHRoZSBcIk9SXCIgZm9ybWF0IGZvciB0aGUgQXBwIFNlYXJjaFxuICogQVBJOlxuICpcbiAqICBgYGBcbiAqICBmaWx0ZXJzOiB7XG4gKiAgIGFsbDogW1xuICogICAge2F1dGhvcjogW1wiQ2xpbnRvblwiLCBcIlNoYXlcIl19XG4gKiAgIF1cbiAqICB9XG4gKiAgYGBgXG4gKlxuICogSG93ZXZlciwgdGhlIGludGVudCBpcyBmb3IgdGhlbSB0byBiZSBBTkQgZmlsdGVycy4gU28gd2UgbmVlZFxuICogdG8gZG8gYSBxdWljayBjaGFuZ2UgaW4gZm9ybWF0dGluZyBiZWZvcmUgYXBwbHlpbmcgdGhlbS5cbiAqXG4gKiAgYGBgXG4gKiAgIGZpbHRlcnM6IHtcbiAqICAgIGFsbDogW1xuICogICAgIHthdXRob3I6IFwiQ2xpbnRvblwifSxcbiAqICAgICB7YXV0aG9yOiBcIlNoYXlcIn1cbiAqICAgIF1cbiAqICAgfVxuICogIGBgYFxuICovXG5mdW5jdGlvbiBmb3JtYXRPUkZpbHRlcnNBc0FORChmaWx0ZXJzID0gW10pIHtcbiAgcmV0dXJuIGZpbHRlcnMucmVkdWNlKChhY2MsIGZpbHRlcikgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZmlsdGVyKVswXTtcbiAgICByZXR1cm4gYWNjLmNvbmNhdCh2YWx1ZXMubWFwKHYgPT4gKHsgW25hbWVdOiB2IH0pKSk7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMoXG4gIGZhY2V0cyA9IHt9LFxuICBjb25kaXRpb25hbEZhY2V0cyA9IHt9LFxuICBmaWx0ZXJzID0gW11cbikge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmFjZXRzKS5yZWR1Y2UoKGFjYywgW2ZhY2V0S2V5LCBmYWNldF0pID0+IHtcbiAgICBpZiAoXG4gICAgICBjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0gJiZcbiAgICAgIHR5cGVvZiBjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgIWNvbmRpdGlvbmFsRmFjZXRzW2ZhY2V0S2V5XSh7IGZpbHRlcnMgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgYWNjW2ZhY2V0S2V5XSA9IGZhY2V0O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hGaWx0ZXIoZmlsdGVyMSwgZmlsdGVyMikge1xuICByZXR1cm4gKFxuICAgIGZpbHRlcjEgPT09IGZpbHRlcjIgfHxcbiAgICAoZmlsdGVyMS5mcm9tICYmXG4gICAgICBmaWx0ZXIxLmZyb20gPT09IGZpbHRlcjIuZnJvbSAmJlxuICAgICAgZmlsdGVyMS50byAmJlxuICAgICAgZmlsdGVyMS50byA9PT0gZmlsdGVyMi50bylcbiAgKTtcbn1cblxuLypcbiAqIFRoZSBEcml2ZXIgaXMgYSBmcmFtZXdvcmsgYWdub3N0aWMgc2VhcmNoIHN0YXRlIG1hbmFnZXIgdGhhdCBpcyBjYXBhYmxlXG4gKiBzeW5jaW5nIHN0YXRlIHRvIHRoZSB1cmwuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaERyaXZlciB7XG4gIHN0YXRlID0gREVGQVVMVF9TVEFURTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgYXBpQ29ubmVjdG9yLFxuICAgIGNvbmRpdGlvbmFsRmFjZXRzLFxuICAgIGRpc2p1bmN0aXZlRmFjZXRzLFxuICAgIGRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyxcbiAgICBmYWNldHMsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIHJlc3VsdF9maWVsZHMsXG4gICAgc2VhcmNoX2ZpZWxkcyxcbiAgICB0cmFja1VybFN0YXRlID0gdHJ1ZVxuICB9KSB7XG4gICAgaWYgKCFhcGlDb25uZWN0b3IpIHtcbiAgICAgIHRocm93IEVycm9yKFwiYXBpQ29ubmVjdG9yIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICB0aGlzLmFwaUNvbm5lY3RvciA9IGFwaUNvbm5lY3RvcjtcbiAgICB0aGlzLmNvbmRpdGlvbmFsRmFjZXRzID0gY29uZGl0aW9uYWxGYWNldHM7XG4gICAgdGhpcy5kaXNqdW5jdGl2ZUZhY2V0cyA9IGRpc2p1bmN0aXZlRmFjZXRzO1xuICAgIHRoaXMuZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzID0gZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzO1xuICAgIHRoaXMuZmFjZXRzID0gZmFjZXRzO1xuICAgIHRoaXMucmVzdWx0X2ZpZWxkcyA9IHJlc3VsdF9maWVsZHM7XG4gICAgdGhpcy5zZWFyY2hfZmllbGRzID0gc2VhcmNoX2ZpZWxkcztcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB0aGlzLnRyYWNrVXJsU3RhdGUgPSB0cmFja1VybFN0YXRlO1xuXG4gICAgbGV0IHVybFN0YXRlO1xuICAgIGlmICh0cmFja1VybFN0YXRlKSB7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIgPSBuZXcgVVJMTWFuYWdlcigpO1xuICAgICAgdXJsU3RhdGUgPSB0aGlzLlVSTE1hbmFnZXIuZ2V0U3RhdGVGcm9tVVJMKCk7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIub25VUkxTdGF0ZUNoYW5nZSh1cmxTdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoeyAuLi5ERUZBVUxUX1NUQVRFLCAuLi51cmxTdGF0ZSB9LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmxTdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIC8vIFJlbWVtYmVyIHRoZSBzdGF0ZSB0aGlzIGFwcGxpY2F0aW9uIGlzIGluaXRpYWxpemVkIGludG8sIHNvIHRoYXQgd2UgY2FuXG4gICAgLy8gcmVzZXQgdG8gaXQgbGF0ZXIuXG4gICAgdGhpcy5zdGFydGluZ1N0YXRlID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIC4uLmluaXRpYWxTdGF0ZVxuICAgIH07XG5cbiAgICAvLyBXZSBmaWx0ZXIgdGhlc2UgaGVyZSB0byBkaXNhbGxvdyBhbnl0aGluZyBvdGhlciB0aGFuIHZhbGlkIHNlYXJjaFxuICAgIC8vIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIGluIGluaXRpYWwgc3RhdGUsIG9yIHVybCBzdGF0ZS4gYHJlc3VsdHNgLCBldGMsXG4gICAgLy8gc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGJlIHBhc3NlZCBpbiwgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkIGJhc2VkIG9uXG4gICAgLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1ldGVycyA9IGZpbHRlclNlYXJjaFBhcmFtZXRlcnMoe1xuICAgICAgLi4udGhpcy5zdGFydGluZ1N0YXRlLFxuICAgICAgLi4udXJsU3RhdGVcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlIHdpdGhvdXQgY2FsbGluZyBfc2V0U3RhdGUsIGJlY2F1c2Ugd2UgZG9uJ3RcbiAgICAvLyB3YW50IHRvIHRyaWdnZXIgYW4gdXBkYXRlIGNhbGxiYWNrLCB3ZSdyZSBqdXN0IGluaXRpYWxpemluZyB0aGUgc3RhdGVcbiAgICAvLyB0byB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGluaXRpYWwgVUkgcmVuZGVyXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5zZWFyY2hQYXJhbWV0ZXJzXG4gICAgfTtcblxuICAgIC8vIFdlJ2xsIHRyaWdnZXIgYW4gaW5pdGlhbCBzZWFyY2ggaWYgaW5pdGlhbCBwYXJhbWV0ZXJzIGNvbnRhaW5cbiAgICAvLyBhIHNlYXJjaCB0ZXJtIG9yIGZpbHRlcnMsIG90aGVyd2lzZSwgd2UnbGwganVzdCBzYXZlIHRoZWlyIHNlbGVjdGlvbnNcbiAgICAvLyBpbiBzdGF0ZSBhcyBpbml0aWFsIHZhbHVlcy5cbiAgICBpZiAoc2VhcmNoUGFyYW1ldGVycy5zZWFyY2hUZXJtIHx8IHNlYXJjaFBhcmFtZXRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHNlYXJjaFBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVTZWFyY2hSZXN1bHRzKHNlYXJjaFBhcmFtZXRlcnMsIHNraXBQdXNoVG9VcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgaXNMb2FkaW5nLFxuICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0gPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uc2VhcmNoUGFyYW1ldGVyc1xuICAgIH07XG5cbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgZGlzanVuY3RpdmVGYWNldHM6IHRoaXMuZGlzanVuY3RpdmVGYWNldHMsXG4gICAgICBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3M6IHRoaXMuZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzLFxuICAgICAgZmFjZXRzOiByZW1vdmVDb25kaXRpb25hbEZhY2V0cyhcbiAgICAgICAgdGhpcy5mYWNldHMsXG4gICAgICAgIHRoaXMuY29uZGl0aW9uYWxGYWNldHMsXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGFsbDogZm9ybWF0T1JGaWx0ZXJzQXNBTkQoZmlsdGVycylcbiAgICAgIH0sXG4gICAgICBwYWdlOiB7XG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHNpemU6IHJlc3VsdHNQZXJQYWdlXG4gICAgICB9LFxuICAgICAgcmVzdWx0X2ZpZWxkczogdGhpcy5yZXN1bHRfZmllbGRzLFxuICAgICAgc2VhcmNoX2ZpZWxkczogdGhpcy5zZWFyY2hfZmllbGRzXG4gICAgfTtcblxuICAgIGlmIChzb3J0RmllbGQgJiYgc29ydERpcmVjdGlvbikge1xuICAgICAgc2VhcmNoT3B0aW9ucy5zb3J0ID0ge1xuICAgICAgICBbc29ydEZpZWxkXTogc29ydERpcmVjdGlvblxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICBjdXJyZW50LFxuICAgICAgZXJyb3I6IFwiXCIsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpQ29ubmVjdG9yLnNlYXJjaChzZWFyY2hUZXJtLCBzZWFyY2hPcHRpb25zKS50aGVuKFxuICAgICAgcmVzdWx0TGlzdCA9PiB7XG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgICAgICBmYWNldHM6IHJlc3VsdExpc3QuaW5mby5mYWNldHMgfHwge30sXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3VsdExpc3QuaW5mby5tZXRhLnJlcXVlc3RfaWQsXG4gICAgICAgICAgcmVzdWx0czogcmVzdWx0TGlzdC5yZXN1bHRzLFxuICAgICAgICAgIHJlc3VsdFNlYXJjaFRlcm06IHNlYXJjaFRlcm0sXG4gICAgICAgICAgdG90YWxQYWdlczogcmVzdWx0TGlzdC5pbmZvLm1ldGEucGFnZS50b3RhbF9wYWdlcyxcbiAgICAgICAgICB0b3RhbFJlc3VsdHM6IHJlc3VsdExpc3QuaW5mby5tZXRhLnBhZ2UudG90YWxfcmVzdWx0cyxcbiAgICAgICAgICB3YXNTZWFyY2hlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXNraXBQdXNoVG9VcmwgJiYgdGhpcy50cmFja1VybFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5VUkxNYW5hZ2VyLnB1c2hTdGF0ZVRvVVJMKHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIHNvcnRGaWVsZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgICAgIGVycm9yOiBgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZDogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIF9zZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlID0geyAuLi50aGlzLnN0YXRlLCAuLi5uZXdTdGF0ZSB9O1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24oc3RhdGUpKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogQW55IHRpbWUgc3RhdGUgaXMgdXBkYXRlZCBpbiB0aGlzIERyaXZlciwgdGhlIHByb3ZpZGVkIGNhbGxiYWNrXG4gICAqIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCB0aGUgdXBkYXRlZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIG9uU3RhdGVDaGFuZ2UgRnVuY3Rpb25cbiAgICovXG4gIHN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKG9uU3RhdGVDaGFuZ2UpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChvblN0YXRlQ2hhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGF2YWlsYWJsZSBhY2l0b25zXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBBbGwgYWN0aW9uc1xuICAgKi9cbiAgZ2V0QWN0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkRmlsdGVyOiB0aGlzLmFkZEZpbHRlcixcbiAgICAgIGNsZWFyRmlsdGVyczogdGhpcy5jbGVhckZpbHRlcnMsXG4gICAgICByZW1vdmVGaWx0ZXI6IHRoaXMucmVtb3ZlRmlsdGVyLFxuICAgICAgcmVzZXQ6IHRoaXMucmVzZXQsXG4gICAgICBzZXRGaWx0ZXI6IHRoaXMuc2V0RmlsdGVyLFxuICAgICAgc2V0UmVzdWx0c1BlclBhZ2U6IHRoaXMuc2V0UmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZXRTZWFyY2hUZXJtOiB0aGlzLnNldFNlYXJjaFRlcm0sXG4gICAgICBzZXRTb3J0OiB0aGlzLnNldFNvcnQsXG4gICAgICBzZXRDdXJyZW50OiB0aGlzLnNldEN1cnJlbnQsXG4gICAgICB0cmFja0NsaWNrVGhyb3VnaDogdGhpcy50cmFja0NsaWNrVGhyb3VnaFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgY3VycmVudCBzdGF0ZS4gVHlwaWNhbGx5IHVzZWQgb24gYXBwIGluaXRpYWxpemF0aW9uLiBTdWJzZXF1ZW50XG4gICAqIHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGNvbWUgdGhyb3VnaCBzdWJzY3JpcHRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBDdXJyZW50IHN0YXRlXG4gICAqL1xuICBnZXRTdGF0ZSgpIHtcbiAgICAvLyBXZSByZXR1cm4gYSBjb3B5IG9mIHN0YXRlIGhlcmUsIGJlY2F1c2Ugd2Ugd2FudCB0byBlbnN1cmUgdGhlIHN0YXRlXG4gICAgLy8gaW5zaWRlIG9mIHRoaXMgb2JqZWN0IHJlbWFpbnMgaW1tdXRhYmxlLlxuICAgIHJldHVybiB7IC4uLnRoaXMuc3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgcmVzdWx0cyAtIEFkZHMgdG8gY3VycmVudCBmaWx0ZXIgdmFsdWVcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgU3RyaW5nIGZpZWxkIG5hbWUgdG8gZmlsdGVyIG9uXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgZmllbGQgdmFsdWUgdG8gZmlsdGVyIG9uXG4gICAqL1xuICBhZGRGaWx0ZXIgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBjb25zdCBleGlzdGluZ0ZpbHRlclZhbHVlcyA9IChmaWx0ZXJzLmZpbmQoZiA9PiBmW25hbWVdKSB8fCB7fSlbbmFtZV0gfHwgW107XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZXMgPSBleGlzdGluZ0ZpbHRlclZhbHVlcy5maW5kKGV4aXN0aW5nID0+XG4gICAgICBtYXRjaEZpbHRlcihleGlzdGluZywgdmFsdWUpXG4gICAgKVxuICAgICAgPyBleGlzdGluZ0ZpbHRlclZhbHVlc1xuICAgICAgOiBleGlzdGluZ0ZpbHRlclZhbHVlcy5jb25jYXQodmFsdWUpO1xuXG4gICAgY29uc3QgZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIgPSBmaWx0ZXJzLmZpbHRlcihmID0+ICFmW25hbWVdKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzV2l0aG91dFRhcmdldEZpbHRlciwgeyBbbmFtZV06IG5ld0ZpbHRlclZhbHVlcyB9XVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgcmVzdWx0cyAtIFJlcGxhY2VzIGN1cnJlbnQgZmlsdGVyIHZhbHVlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIHRvIGZpbHRlciBvblxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIGZpZWxkIHZhbHVlIHRvIGZpbHRlciBvblxuICAgKi9cbiAgc2V0RmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgbGV0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBmaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IE9iamVjdC5rZXlzKGZpbHRlcilbMF0gIT09IG5hbWUpO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnMsIHsgW25hbWVdOiBbdmFsdWVdIH1dXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc2V0IHNlYXJjaCBleHBlcmllbmNlIHRvIGluaXRpYWwgc3RhdGVcbiAgICpcbiAgICovXG4gIHJlc2V0ID0gKCkgPT4ge1xuICAgIHRoaXMuX3NldFN0YXRlKHRoaXMuc3RhcnRpbmdTdGF0ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmaWx0ZXIgZnJvbSByZXN1bHRzXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIGZvciBmaWx0ZXIgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgKE9wdGlvbmFsKSBmaWVsZCB2YWx1ZSBmb3IgZmlsdGVyIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlRmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSB2YWx1ZVxuICAgICAgPyByZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZShmaWx0ZXJzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIDogZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICFmaWx0ZXJbbmFtZV0pO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnNcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBmaWx0ZXJzXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBleGNlcHQgQXJyYXlbU3RyaW5nXSBmaWVsZCBuYW1lIG9mIGFueSBmaWx0ZXJzIHRoYXQgc2hvdWxkIHJlbWFpblxuICAgKi9cbiAgY2xlYXJGaWx0ZXJzID0gKGV4Y2VwdCA9IFtdKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyRmllbGQgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgICAgcmV0dXJuIGV4Y2VwdC5pbmNsdWRlcyhmaWx0ZXJGaWVsZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVyc1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHJlc3VsdHNQZXJQYWdlIEludGVnZXJcbiAgICovXG4gIHNldFJlc3VsdHNQZXJQYWdlID0gcmVzdWx0c1BlclBhZ2UgPT4ge1xuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIHJlc3VsdHNQZXJQYWdlXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBzZWFyY2ggdGVybVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gc2VhcmNoVGVybSBTdHJpbmdcbiAgICovXG4gIHNldFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgIHNlYXJjaFRlcm1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IHNvcnRcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHNvcnRGaWVsZCBTdHJpbmdcbiAgICogQHBhcmFtIHNvcnREaXJlY3Rpb24gU3RyaW5nIFtcImFzY1wifFwiZGVzY1wiXVxuICAgKi9cbiAgc2V0U29ydCA9IChzb3J0RmllbGQsIHNvcnREaXJlY3Rpb24pID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgc29ydEZpZWxkXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBwYWdlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50IEludGVnZXJcbiAgICovXG4gIHNldEN1cnJlbnQgPSBjdXJyZW50ID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnRcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVwb3J0IGEgY2xpY2sgdGhyb3VnaCBldmVudC4gQSBjbGljayB0aHJvdWdoIGV2ZW50IGlzIHdoZW4gYSB1c2VyXG4gICAqIGNsaWNrcyBvbiBhIHJlc3VsdCBsaW5rLiBDbGljayBldmVudHMgY2FuIGJlIHJldmlld2VkIGluIHRoZSBBcHAgU2VhcmNoXG4gICAqIEFuYWx5dGljcyBEYXNoYm9hcmQuXG4gICAqXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIFN0cmluZyBUaGUgZG9jdW1lbnQgSUQgYXNzb2NpYXRlZCB3aXRoIHJlc3VsdCB0aGF0IHdhc1xuICAgKiBjbGlja2VkXG4gICAqIEBwYXJhbSB0YWcgQXJyYXlbU3RyaW5nXSBPcHRpb25hbCBUYWdzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhdGVnb3JpemVcbiAgICogdGhpcyBjbGljayBldmVudFxuICAgKi9cbiAgdHJhY2tDbGlja1Rocm91Z2ggPSAoZG9jdW1lbnRJZCwgdGFncyA9IFtdKSA9PiB7XG4gICAgY29uc3QgeyByZXF1ZXN0SWQsIHNlYXJjaFRlcm0gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICB0aGlzLmFwaUNvbm5lY3Rvci5jbGljayh7XG4gICAgICBxdWVyeTogc2VhcmNoVGVybSxcbiAgICAgIGRvY3VtZW50SWQsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgICB0YWdzXG4gICAgfSk7XG4gIH07XG59XG4iXX0= |
@@ -213,2 +213,6 @@ "use strict"; | ||
_defineProperty(this, "reset", function () { | ||
_this._setState(_this.startingState); | ||
}); | ||
_defineProperty(this, "removeFilter", function (name, value) { | ||
@@ -306,3 +310,7 @@ var filters = _this.state.filters; | ||
urlState = {}; | ||
} // We filter these here to disallow anything other than valid search | ||
} // Remember the state this application is initialized into, so that we can | ||
// reset to it later. | ||
this.startingState = _objectSpread({}, this.state, initialState); // We filter these here to disallow anything other than valid search | ||
// parameters to be passed in initial state, or url state. `results`, etc, | ||
@@ -312,4 +320,3 @@ // should not be allowed to be passed in, that should be generated based on | ||
var searchParameters = filterSearchParameters(_objectSpread({}, this.state, initialState, urlState)); // Initialize the state without calling _setState, because we don't | ||
var searchParameters = filterSearchParameters(_objectSpread({}, this.startingState, urlState)); // Initialize the state without calling _setState, because we don't | ||
// want to trigger an update callback, we're just initializing the state | ||
@@ -439,2 +446,3 @@ // to the correct default values for the initial UI render | ||
removeFilter: this.removeFilter, | ||
reset: this.reset, | ||
setFilter: this.setFilter, | ||
@@ -477,2 +485,2 @@ setResultsPerPage: this.setResultsPerPage, | ||
exports.default = SearchDriver; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiZmlsdGVyU2VhcmNoUGFyYW1ldGVycyIsImN1cnJlbnQiLCJmaWx0ZXJzIiwicmVzdWx0c1BlclBhZ2UiLCJzZWFyY2hUZXJtIiwic29ydERpcmVjdGlvbiIsInNvcnRGaWVsZCIsInJlbW92ZVNpbmdsZUZpbHRlclZhbHVlIiwibmFtZSIsInZhbHVlIiwicmVkdWNlIiwiYWNjIiwiZmlsdGVyIiwiY3VycmVudEZpbHRlclZhbHVlcyIsInVwZGF0ZWRGaWx0ZXJWYWx1ZXMiLCJmaWx0ZXJWYWx1ZSIsIm1hdGNoRmlsdGVyIiwibGVuZ3RoIiwiY29uY2F0IiwiREVGQVVMVF9TVEFURSIsImVycm9yIiwiaXNMb2FkaW5nIiwiZmFjZXRzIiwicmVxdWVzdElkIiwicmVzdWx0cyIsInJlc3VsdFNlYXJjaFRlcm0iLCJ0b3RhbFBhZ2VzIiwidG90YWxSZXN1bHRzIiwid2FzU2VhcmNoZWQiLCJmb3JtYXRPUkZpbHRlcnNBc0FORCIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZXMiLCJtYXAiLCJ2IiwicmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMiLCJjb25kaXRpb25hbEZhY2V0cyIsImVudHJpZXMiLCJmYWNldEtleSIsImZhY2V0IiwiZmlsdGVyMSIsImZpbHRlcjIiLCJmcm9tIiwidG8iLCJTZWFyY2hEcml2ZXIiLCJhcGlDb25uZWN0b3IiLCJkaXNqdW5jdGl2ZUZhY2V0cyIsImRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyIsImluaXRpYWxTdGF0ZSIsInJlc3VsdF9maWVsZHMiLCJzZWFyY2hfZmllbGRzIiwidHJhY2tVcmxTdGF0ZSIsInN0YXRlIiwiZXhpc3RpbmdGaWx0ZXJWYWx1ZXMiLCJmaW5kIiwiZiIsIm5ld0ZpbHRlclZhbHVlcyIsImV4aXN0aW5nIiwiZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIiLCJfdXBkYXRlU2VhcmNoUmVzdWx0cyIsInVwZGF0ZWRGaWx0ZXJzIiwiZXhjZXB0IiwiZmlsdGVyRmllbGQiLCJpbmNsdWRlcyIsImRvY3VtZW50SWQiLCJ0YWdzIiwiY2xpY2siLCJxdWVyeSIsIkVycm9yIiwic3Vic2NyaXB0aW9ucyIsInVybFN0YXRlIiwiVVJMTWFuYWdlciIsImdldFN0YXRlRnJvbVVSTCIsIm9uVVJMU3RhdGVDaGFuZ2UiLCJzZWFyY2hQYXJhbWV0ZXJzIiwic2tpcFB1c2hUb1VybCIsInNlYXJjaE9wdGlvbnMiLCJhbGwiLCJwYWdlIiwic2l6ZSIsInNvcnQiLCJfc2V0U3RhdGUiLCJzZWFyY2giLCJ0aGVuIiwicmVzdWx0TGlzdCIsImluZm8iLCJtZXRhIiwicmVxdWVzdF9pZCIsInRvdGFsX3BhZ2VzIiwidG90YWxfcmVzdWx0cyIsInB1c2hTdGF0ZVRvVVJMIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJuZXdTdGF0ZSIsImZvckVhY2giLCJzdWJzY3JpcHRpb24iLCJvblN0YXRlQ2hhbmdlIiwicHVzaCIsImFkZEZpbHRlciIsImNsZWFyRmlsdGVycyIsInJlbW92ZUZpbHRlciIsInNldEZpbHRlciIsInNldFJlc3VsdHNQZXJQYWdlIiwic2V0U2VhcmNoVGVybSIsInNldFNvcnQiLCJzZXRDdXJyZW50IiwidHJhY2tDbGlja1Rocm91Z2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0Esc0JBQVQsT0FPRztBQUFBLE1BTkRDLE9BTUMsUUFOREEsT0FNQztBQUFBLE1BTERDLE9BS0MsUUFMREEsT0FLQztBQUFBLE1BSkRDLGNBSUMsUUFKREEsY0FJQztBQUFBLE1BSERDLFVBR0MsUUFIREEsVUFHQztBQUFBLE1BRkRDLGFBRUMsUUFGREEsYUFFQztBQUFBLE1BRERDLFNBQ0MsUUFEREEsU0FDQztBQUNELFNBQU87QUFDTEwsSUFBQUEsT0FBTyxFQUFQQSxPQURLO0FBRUxDLElBQUFBLE9BQU8sRUFBUEEsT0FGSztBQUdMQyxJQUFBQSxjQUFjLEVBQWRBLGNBSEs7QUFJTEMsSUFBQUEs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QSxpQkFBaUIsRUFBRSxLQUFLQSxpQkFMbkI7QUFNTEMsUUFBQUEsYUFBYSxFQUFFLEtBQUtBLGFBTmY7QUFPTEMsUUFBQUEsT0FBTyxFQUFFLEtBQUtBLE9BUFQ7QUFRTEMsUUFBQUEsVUFBVSxFQUFFLEtBQUtBLFVBUlo7QUFTTEMsUUFBQUEsaUJBQWlCLEVBQUUsS0FBS0E7QUFUbkIsT0FBUDtBQVdEO0FBRUQ7Ozs7Ozs7OzsrQkFNVztBQUNUO0FBQ0E7QUFDQSwrQkFBWSxLQUFLdEQsS0FBakI7QUFDRDtBQUVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFVSTE1hbmFnZXIgZnJvbSBcIi4vVVJMTWFuYWdlclwiO1xuXG5mdW5jdGlvbiBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgY3VycmVudCxcbiAgZmlsdGVycyxcbiAgcmVzdWx0c1BlclBhZ2UsXG4gIHNlYXJjaFRlcm0sXG4gIHNvcnREaXJlY3Rpb24sXG4gIHNvcnRGaWVsZFxufSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQsXG4gICAgZmlsdGVycyxcbiAgICByZXN1bHRzUGVyUGFnZSxcbiAgICBzZWFyY2hUZXJtLFxuICAgIHNvcnREaXJlY3Rpb24sXG4gICAgc29ydEZpZWxkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZUZpbHRlclZhbHVlKGZpbHRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICBpZiAoZmlsdGVyW25hbWVdKSB7XG4gICAgICBjb25zdCBjdXJyZW50RmlsdGVyVmFsdWVzID0gZmlsdGVyW25hbWVdO1xuICAgICAgY29uc3QgdXBkYXRlZEZpbHRlclZhbHVlcyA9IGN1cnJlbnRGaWx0ZXJWYWx1ZXMuZmlsdGVyKFxuICAgICAgICBmaWx0ZXJWYWx1ZSA9PiAhbWF0Y2hGaWx0ZXIoZmlsdGVyVmFsdWUsIHZhbHVlKVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoe1xuICAgICAgICAgIFtuYW1lXTogdXBkYXRlZEZpbHRlclZhbHVlc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2MuY29uY2F0KGZpbHRlcik7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RBVEUgPSB7XG4gIC8vIFNlYXJjaCBQYXJhbWV0ZXJzIC0tIFRoaXMgaXMgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZSBpbnB1dCBzdGF0ZS5cbiAgY3VycmVudDogMSxcbiAgZmlsdGVyczogW10sXG4gIHJlc3VsdHNQZXJQYWdlOiAyMCxcbiAgc2VhcmNoVGVybTogXCJcIixcbiAgc29ydERpcmVjdGlvbjogXCJcIixcbiAgc29ydEZpZWxkOiBcIlwiLFxuICAvLyBSZXN1bHQgU3RhdGUgLS0gVGhpcyBzdGF0ZSByZXByZXNlbnRzIHN0YXRlIHRoYXQgaXMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5XG4gIC8vIGFzIHRoZSByZXN1bHQgb2YgY2hhbmdpbmcgaW5wdXQgc3RhdGUuXG4gIGVycm9yOiBcIlwiLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBmYWNldHM6IHt9LFxuICByZXF1ZXN0SWQ6IFwiXCIsXG4gIHJlc3VsdHM6IFtdLFxuICByZXN1bHRTZWFyY2hUZXJtOiBcIlwiLFxuICB0b3RhbFBhZ2VzOiAwLFxuICB0b3RhbFJlc3VsdHM6IDAsXG4gIHdhc1NlYXJjaGVkOiBmYWxzZVxufTtcblxuLypcbiAqIFRoaXMgZml4ZXMgYW4gaXNzdWUgd2l0aCBmaWx0ZXJpbmcuXG4gKiBPdXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIGZpbHRlcnMgYXJlIHRoZSBcIk9SXCIgZm9ybWF0IGZvciB0aGUgQXBwIFNlYXJjaFxuICogQVBJOlxuICpcbiAqICBgYGBcbiAqICBmaWx0ZXJzOiB7XG4gKiAgIGFsbDogW1xuICogICAge2F1dGhvcjogW1wiQ2xpbnRvblwiLCBcIlNoYXlcIl19XG4gKiAgIF1cbiAqICB9XG4gKiAgYGBgXG4gKlxuICogSG93ZXZlciwgdGhlIGludGVudCBpcyBmb3IgdGhlbSB0byBiZSBBTkQgZmlsdGVycy4gU28gd2UgbmVlZFxuICogdG8gZG8gYSBxdWljayBjaGFuZ2UgaW4gZm9ybWF0dGluZyBiZWZvcmUgYXBwbHlpbmcgdGhlbS5cbiAqXG4gKiAgYGBgXG4gKiAgIGZpbHRlcnM6IHtcbiAqICAgIGFsbDogW1xuICogICAgIHthdXRob3I6IFwiQ2xpbnRvblwifSxcbiAqICAgICB7YXV0aG9yOiBcIlNoYXlcIn1cbiAqICAgIF1cbiAqICAgfVxuICogIGBgYFxuICovXG5mdW5jdGlvbiBmb3JtYXRPUkZpbHRlcnNBc0FORChmaWx0ZXJzID0gW10pIHtcbiAgcmV0dXJuIGZpbHRlcnMucmVkdWNlKChhY2MsIGZpbHRlcikgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZmlsdGVyKVswXTtcbiAgICByZXR1cm4gYWNjLmNvbmNhdCh2YWx1ZXMubWFwKHYgPT4gKHsgW25hbWVdOiB2IH0pKSk7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMoXG4gIGZhY2V0cyA9IHt9LFxuICBjb25kaXRpb25hbEZhY2V0cyA9IHt9LFxuICBmaWx0ZXJzID0gW11cbikge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmFjZXRzKS5yZWR1Y2UoKGFjYywgW2ZhY2V0S2V5LCBmYWNldF0pID0+IHtcbiAgICBpZiAoXG4gICAgICBjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0gJiZcbiAgICAgIHR5cGVvZiBjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgIWNvbmRpdGlvbmFsRmFjZXRzW2ZhY2V0S2V5XSh7IGZpbHRlcnMgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgYWNjW2ZhY2V0S2V5XSA9IGZhY2V0O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hGaWx0ZXIoZmlsdGVyMSwgZmlsdGVyMikge1xuICByZXR1cm4gKFxuICAgIGZpbHRlcjEgPT09IGZpbHRlcjIgfHxcbiAgICAoZmlsdGVyMS5mcm9tICYmXG4gICAgICBmaWx0ZXIxLmZyb20gPT09IGZpbHRlcjIuZnJvbSAmJlxuICAgICAgZmlsdGVyMS50byAmJlxuICAgICAgZmlsdGVyMS50byA9PT0gZmlsdGVyMi50bylcbiAgKTtcbn1cblxuLypcbiAqIFRoZSBEcml2ZXIgaXMgYSBmcmFtZXdvcmsgYWdub3N0aWMgc2VhcmNoIHN0YXRlIG1hbmFnZXIgdGhhdCBpcyBjYXBhYmxlXG4gKiBzeW5jaW5nIHN0YXRlIHRvIHRoZSB1cmwuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaERyaXZlciB7XG4gIHN0YXRlID0gREVGQVVMVF9TVEFURTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgYXBpQ29ubmVjdG9yLFxuICAgIGNvbmRpdGlvbmFsRmFjZXRzLFxuICAgIGRpc2p1bmN0aXZlRmFjZXRzLFxuICAgIGRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyxcbiAgICBmYWNldHMsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIHJlc3VsdF9maWVsZHMsXG4gICAgc2VhcmNoX2ZpZWxkcyxcbiAgICB0cmFja1VybFN0YXRlID0gdHJ1ZVxuICB9KSB7XG4gICAgaWYgKCFhcGlDb25uZWN0b3IpIHtcbiAgICAgIHRocm93IEVycm9yKFwiYXBpQ29ubmVjdG9yIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICB0aGlzLmFwaUNvbm5lY3RvciA9IGFwaUNvbm5lY3RvcjtcbiAgICB0aGlzLmNvbmRpdGlvbmFsRmFjZXRzID0gY29uZGl0aW9uYWxGYWNldHM7XG4gICAgdGhpcy5kaXNqdW5jdGl2ZUZhY2V0cyA9IGRpc2p1bmN0aXZlRmFjZXRzO1xuICAgIHRoaXMuZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzID0gZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzO1xuICAgIHRoaXMuZmFjZXRzID0gZmFjZXRzO1xuICAgIHRoaXMucmVzdWx0X2ZpZWxkcyA9IHJlc3VsdF9maWVsZHM7XG4gICAgdGhpcy5zZWFyY2hfZmllbGRzID0gc2VhcmNoX2ZpZWxkcztcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB0aGlzLnRyYWNrVXJsU3RhdGUgPSB0cmFja1VybFN0YXRlO1xuXG4gICAgbGV0IHVybFN0YXRlO1xuICAgIGlmICh0cmFja1VybFN0YXRlKSB7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIgPSBuZXcgVVJMTWFuYWdlcigpO1xuICAgICAgdXJsU3RhdGUgPSB0aGlzLlVSTE1hbmFnZXIuZ2V0U3RhdGVGcm9tVVJMKCk7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIub25VUkxTdGF0ZUNoYW5nZSh1cmxTdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoeyAuLi5ERUZBVUxUX1NUQVRFLCAuLi51cmxTdGF0ZSB9LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmxTdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIC8vIFdlIGZpbHRlciB0aGVzZSBoZXJlIHRvIGRpc2FsbG93IGFueXRoaW5nIG90aGVyIHRoYW4gdmFsaWQgc2VhcmNoXG4gICAgLy8gcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgaW4gaW5pdGlhbCBzdGF0ZSwgb3IgdXJsIHN0YXRlLiBgcmVzdWx0c2AsIGV0YyxcbiAgICAvLyBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gYmUgcGFzc2VkIGluLCB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQgYmFzZWQgb25cbiAgICAvLyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnlcbiAgICBjb25zdCBzZWFyY2hQYXJhbWV0ZXJzID0gZmlsdGVyU2VhcmNoUGFyYW1ldGVycyh7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uaW5pdGlhbFN0YXRlLFxuICAgICAgLi4udXJsU3RhdGVcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlIHdpdGhvdXQgY2FsbGluZyBfc2V0U3RhdGUsIGJlY2F1c2Ugd2UgZG9uJ3RcbiAgICAvLyB3YW50IHRvIHRyaWdnZXIgYW4gdXBkYXRlIGNhbGxiYWNrLCB3ZSdyZSBqdXN0IGluaXRpYWxpemluZyB0aGUgc3RhdGVcbiAgICAvLyB0byB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGluaXRpYWwgVUkgcmVuZGVyXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5zZWFyY2hQYXJhbWV0ZXJzXG4gICAgfTtcblxuICAgIC8vIFdlJ2xsIHRyaWdnZXIgYW4gaW5pdGlhbCBzZWFyY2ggaWYgaW5pdGlhbCBwYXJhbWV0ZXJzIGNvbnRhaW5cbiAgICAvLyBhIHNlYXJjaCB0ZXJtIG9yIGZpbHRlcnMsIG90aGVyd2lzZSwgd2UnbGwganVzdCBzYXZlIHRoZWlyIHNlbGVjdGlvbnNcbiAgICAvLyBpbiBzdGF0ZSBhcyBpbml0aWFsIHZhbHVlcy5cbiAgICBpZiAoc2VhcmNoUGFyYW1ldGVycy5zZWFyY2hUZXJtIHx8IHNlYXJjaFBhcmFtZXRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHNlYXJjaFBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVTZWFyY2hSZXN1bHRzKHNlYXJjaFBhcmFtZXRlcnMsIHNraXBQdXNoVG9VcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgaXNMb2FkaW5nLFxuICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0gPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uc2VhcmNoUGFyYW1ldGVyc1xuICAgIH07XG5cbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgZGlzanVuY3RpdmVGYWNldHM6IHRoaXMuZGlzanVuY3RpdmVGYWNldHMsXG4gICAgICBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3M6IHRoaXMuZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzLFxuICAgICAgZmFjZXRzOiByZW1vdmVDb25kaXRpb25hbEZhY2V0cyhcbiAgICAgICAgdGhpcy5mYWNldHMsXG4gICAgICAgIHRoaXMuY29uZGl0aW9uYWxGYWNldHMsXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGFsbDogZm9ybWF0T1JGaWx0ZXJzQXNBTkQoZmlsdGVycylcbiAgICAgIH0sXG4gICAgICBwYWdlOiB7XG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHNpemU6IHJlc3VsdHNQZXJQYWdlXG4gICAgICB9LFxuICAgICAgcmVzdWx0X2ZpZWxkczogdGhpcy5yZXN1bHRfZmllbGRzLFxuICAgICAgc2VhcmNoX2ZpZWxkczogdGhpcy5zZWFyY2hfZmllbGRzXG4gICAgfTtcblxuICAgIGlmIChzb3J0RmllbGQgJiYgc29ydERpcmVjdGlvbikge1xuICAgICAgc2VhcmNoT3B0aW9ucy5zb3J0ID0ge1xuICAgICAgICBbc29ydEZpZWxkXTogc29ydERpcmVjdGlvblxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICBjdXJyZW50LFxuICAgICAgZXJyb3I6IFwiXCIsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpQ29ubmVjdG9yLnNlYXJjaChzZWFyY2hUZXJtLCBzZWFyY2hPcHRpb25zKS50aGVuKFxuICAgICAgcmVzdWx0TGlzdCA9PiB7XG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgICAgICBmYWNldHM6IHJlc3VsdExpc3QuaW5mby5mYWNldHMgfHwge30sXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3VsdExpc3QuaW5mby5tZXRhLnJlcXVlc3RfaWQsXG4gICAgICAgICAgcmVzdWx0czogcmVzdWx0TGlzdC5yZXN1bHRzLFxuICAgICAgICAgIHJlc3VsdFNlYXJjaFRlcm06IHNlYXJjaFRlcm0sXG4gICAgICAgICAgdG90YWxQYWdlczogcmVzdWx0TGlzdC5pbmZvLm1ldGEucGFnZS50b3RhbF9wYWdlcyxcbiAgICAgICAgICB0b3RhbFJlc3VsdHM6IHJlc3VsdExpc3QuaW5mby5tZXRhLnBhZ2UudG90YWxfcmVzdWx0cyxcbiAgICAgICAgICB3YXNTZWFyY2hlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXNraXBQdXNoVG9VcmwgJiYgdGhpcy50cmFja1VybFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5VUkxNYW5hZ2VyLnB1c2hTdGF0ZVRvVVJMKHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIHNvcnRGaWVsZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgICAgIGVycm9yOiBgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZDogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIF9zZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlID0geyAuLi50aGlzLnN0YXRlLCAuLi5uZXdTdGF0ZSB9O1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24oc3RhdGUpKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogQW55IHRpbWUgc3RhdGUgaXMgdXBkYXRlZCBpbiB0aGlzIERyaXZlciwgdGhlIHByb3ZpZGVkIGNhbGxiYWNrXG4gICAqIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCB0aGUgdXBkYXRlZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIG9uU3RhdGVDaGFuZ2UgRnVuY3Rpb25cbiAgICovXG4gIHN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKG9uU3RhdGVDaGFuZ2UpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChvblN0YXRlQ2hhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGF2YWlsYWJsZSBhY2l0b25zXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBBbGwgYWN0aW9uc1xuICAgKi9cbiAgZ2V0QWN0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkRmlsdGVyOiB0aGlzLmFkZEZpbHRlcixcbiAgICAgIGNsZWFyRmlsdGVyczogdGhpcy5jbGVhckZpbHRlcnMsXG4gICAgICByZW1vdmVGaWx0ZXI6IHRoaXMucmVtb3ZlRmlsdGVyLFxuICAgICAgc2V0RmlsdGVyOiB0aGlzLnNldEZpbHRlcixcbiAgICAgIHNldFJlc3VsdHNQZXJQYWdlOiB0aGlzLnNldFJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2V0U2VhcmNoVGVybTogdGhpcy5zZXRTZWFyY2hUZXJtLFxuICAgICAgc2V0U29ydDogdGhpcy5zZXRTb3J0LFxuICAgICAgc2V0Q3VycmVudDogdGhpcy5zZXRDdXJyZW50LFxuICAgICAgdHJhY2tDbGlja1Rocm91Z2g6IHRoaXMudHJhY2tDbGlja1Rocm91Z2hcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGN1cnJlbnQgc3RhdGUuIFR5cGljYWxseSB1c2VkIG9uIGFwcCBpbml0aWFsaXphdGlvbi4gU3Vic2VxdWVudFxuICAgKiBzdGF0ZSB1cGRhdGVzIHNob3VsZCBjb21lIHRocm91Z2ggc3Vic2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYmplY3QgQ3VycmVudCBzdGF0ZVxuICAgKi9cbiAgZ2V0U3RhdGUoKSB7XG4gICAgLy8gV2UgcmV0dXJuIGEgY29weSBvZiBzdGF0ZSBoZXJlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZW5zdXJlIHRoZSBzdGF0ZVxuICAgIC8vIGluc2lkZSBvZiB0aGlzIG9iamVjdCByZW1haW5zIGltbXV0YWJsZS5cbiAgICByZXR1cm4geyAuLi50aGlzLnN0YXRlIH07XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHJlc3VsdHMgLSBBZGRzIHRvIGN1cnJlbnQgZmlsdGVyIHZhbHVlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIHRvIGZpbHRlciBvblxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIGZpZWxkIHZhbHVlIHRvIGZpbHRlciBvblxuICAgKi9cbiAgYWRkRmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgZXhpc3RpbmdGaWx0ZXJWYWx1ZXMgPSAoZmlsdGVycy5maW5kKGYgPT4gZltuYW1lXSkgfHwge30pW25hbWVdIHx8IFtdO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWVzID0gZXhpc3RpbmdGaWx0ZXJWYWx1ZXMuZmluZChleGlzdGluZyA9PlxuICAgICAgbWF0Y2hGaWx0ZXIoZXhpc3RpbmcsIHZhbHVlKVxuICAgIClcbiAgICAgID8gZXhpc3RpbmdGaWx0ZXJWYWx1ZXNcbiAgICAgIDogZXhpc3RpbmdGaWx0ZXJWYWx1ZXMuY29uY2F0KHZhbHVlKTtcblxuICAgIGNvbnN0IGZpbHRlcnNXaXRob3V0VGFyZ2V0RmlsdGVyID0gZmlsdGVycy5maWx0ZXIoZiA9PiAhZltuYW1lXSk7XG5cbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIsIHsgW25hbWVdOiBuZXdGaWx0ZXJWYWx1ZXMgfV1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRmlsdGVyIHJlc3VsdHMgLSBSZXBsYWNlcyBjdXJyZW50IGZpbHRlciB2YWx1ZVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBTdHJpbmcgZmllbGQgbmFtZSB0byBmaWx0ZXIgb25cbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyBmaWVsZCB2YWx1ZSB0byBmaWx0ZXIgb25cbiAgICovXG4gIHNldEZpbHRlciA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGxldCB7IGZpbHRlcnMgfSA9IHRoaXMuc3RhdGU7XG4gICAgZmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdICE9PSBuYW1lKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzLCB7IFtuYW1lXTogW3ZhbHVlXSB9XVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgZmlsdGVyIGZyb20gcmVzdWx0c1xuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBTdHJpbmcgZmllbGQgbmFtZSBmb3IgZmlsdGVyIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIChPcHRpb25hbCkgZmllbGQgdmFsdWUgZm9yIGZpbHRlciB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUZpbHRlciA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0gdmFsdWVcbiAgICAgID8gcmVtb3ZlU2luZ2xlRmlsdGVyVmFsdWUoZmlsdGVycywgbmFtZSwgdmFsdWUpXG4gICAgICA6IGZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhZmlsdGVyW25hbWVdKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgZmlsdGVyc1xuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gZXhjZXB0IEFycmF5W1N0cmluZ10gZmllbGQgbmFtZSBvZiBhbnkgZmlsdGVycyB0aGF0IHNob3VsZCByZW1haW5cbiAgICovXG4gIGNsZWFyRmlsdGVycyA9IChleGNlcHQgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlckZpZWxkID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICAgIHJldHVybiBleGNlcHQuaW5jbHVkZXMoZmlsdGVyRmllbGQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnNcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSByZXN1bHRzUGVyUGFnZSBJbnRlZ2VyXG4gICAqL1xuICBzZXRSZXN1bHRzUGVyUGFnZSA9IHJlc3VsdHNQZXJQYWdlID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICByZXN1bHRzUGVyUGFnZVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgc2VhcmNoIHRlcm1cbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHNlYXJjaFRlcm0gU3RyaW5nXG4gICAqL1xuICBzZXRTZWFyY2hUZXJtID0gc2VhcmNoVGVybSA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogW10sXG4gICAgICBzZWFyY2hUZXJtXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBzb3J0XG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBzb3J0RmllbGQgU3RyaW5nXG4gICAqIEBwYXJhbSBzb3J0RGlyZWN0aW9uIFN0cmluZyBbXCJhc2NcInxcImRlc2NcIl1cbiAgICovXG4gIHNldFNvcnQgPSAoc29ydEZpZWxkLCBzb3J0RGlyZWN0aW9uKSA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgcGFnZVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudCBJbnRlZ2VyXG4gICAqL1xuICBzZXRDdXJyZW50ID0gY3VycmVudCA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBhIGNsaWNrIHRocm91Z2ggZXZlbnQuIEEgY2xpY2sgdGhyb3VnaCBldmVudCBpcyB3aGVuIGEgdXNlclxuICAgKiBjbGlja3Mgb24gYSByZXN1bHQgbGluay4gQ2xpY2sgZXZlbnRzIGNhbiBiZSByZXZpZXdlZCBpbiB0aGUgQXBwIFNlYXJjaFxuICAgKiBBbmFseXRpY3MgRGFzaGJvYXJkLlxuICAgKlxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCBTdHJpbmcgVGhlIGRvY3VtZW50IElEIGFzc29jaWF0ZWQgd2l0aCByZXN1bHQgdGhhdCB3YXNcbiAgICogY2xpY2tlZFxuICAgKiBAcGFyYW0gdGFnIEFycmF5W1N0cmluZ10gT3B0aW9uYWwgVGFncyB3aGljaCBjYW4gYmUgdXNlZCB0byBjYXRlZ29yaXplXG4gICAqIHRoaXMgY2xpY2sgZXZlbnRcbiAgICovXG4gIHRyYWNrQ2xpY2tUaHJvdWdoID0gKGRvY3VtZW50SWQsIHRhZ3MgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHsgcmVxdWVzdElkLCBzZWFyY2hUZXJtIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgdGhpcy5hcGlDb25uZWN0b3IuY2xpY2soe1xuICAgICAgcXVlcnk6IHNlYXJjaFRlcm0sXG4gICAgICBkb2N1bWVudElkLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgdGFnc1xuICAgIH0pO1xuICB9O1xufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiZmlsdGVyU2VhcmNoUGFyYW1ldGVycyIsImN1cnJlbnQiLCJmaWx0ZXJzIiwicmVzdWx0c1BlclBhZ2UiLCJzZWFyY2hUZXJtIiwic29ydERpcmVjdGlvbiIsInNvcnRGaWVsZCIsInJlbW92ZVNpbmdsZUZpbHRlclZhbHVlIiwibmFtZSIsInZhbHVlIiwicmVkdWNlIiwiYWNjIiwiZmlsdGVyIiwiY3VycmVudEZpbHRlclZhbHVlcyIsInVwZGF0ZWRGaWx0ZXJWYWx1ZXMiLCJmaWx0ZXJWYWx1ZSIsIm1hdGNoRmlsdGVyIiwibGVuZ3RoIiwiY29uY2F0IiwiREVGQVVMVF9TVEFURSIsImVycm9yIiwiaXNMb2FkaW5nIiwiZmFjZXRzIiwicmVxdWVzdElkIiwicmVzdWx0cyIsInJlc3VsdFNlYXJjaFRlcm0iLCJ0b3RhbFBhZ2VzIiwidG90YWxSZXN1bHRzIiwid2FzU2VhcmNoZWQiLCJmb3JtYXRPUkZpbHRlcnNBc0FORCIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZXMiLCJtYXAiLCJ2IiwicmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMiLCJjb25kaXRpb25hbEZhY2V0cyIsImVudHJpZXMiLCJmYWNldEtleSIsImZhY2V0IiwiZmlsdGVyMSIsImZpbHRlcjIiLCJmcm9tIiwidG8iLCJTZWFyY2hEcml2ZXIiLCJhcGlDb25uZWN0b3IiLCJkaXNqdW5jdGl2ZUZhY2V0cyIsImRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyIsImluaXRpYWxTdGF0ZSIsInJlc3VsdF9maWVsZHMiLCJzZWFyY2hfZmllbGRzIiwidHJhY2tVcmxTdGF0ZSIsInN0YXRlIiwiZXhpc3RpbmdGaWx0ZXJWYWx1ZXMiLCJmaW5kIiwiZiIsIm5ld0ZpbHRlclZhbHVlcyIsImV4aXN0aW5nIiwiZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIiLCJfdXBkYXRlU2VhcmNoUmVzdWx0cyIsIl9zZXRTdGF0ZSIsInN0YXJ0aW5nU3RhdGUiLCJ1cGRhdGVkRmlsdGVycyIsImV4Y2VwdCIsImZpbHRlckZpZWxkIiwiaW5jbHVkZXMiLCJkb2N1bWVudElkIiwidGFncyIsImNsaWNrIiwicXVlcnkiLCJFcnJvciIsInN1YnNjcmlwdGlvbnMiLCJ1cmxTdGF0ZSIsIlVSTE1hbmFnZXIiLCJnZXRTdGF0ZUZyb21VUkwiLCJvblVSTFN0YXRlQ2hhbmdlIiwic2VhcmNoUGFyYW1ldGVycyIsInNraXBQdXNoVG9VcmwiLCJzZWFyY2hPcHRpb25zIiwiYWxsIiwicGFnZSIsInNpemUiLCJzb3J0Iiwic2VhcmNoIiwidGhlbiIsInJlc3VsdExpc3QiLCJpbmZvIiwibWV0YSIsInJlcXVlc3RfaWQiLCJ0b3RhbF9wYWdlcyIsInRvdGFsX3Jlc3VsdHMiLCJwdXNoU3RhdGVUb1VSTCIsImNvbnNvbGUiLCJtZXNzYWdlIiwibmV3U3RhdGUiLCJmb3JFYWNoIiwic3Vic2NyaXB0aW9uIiwib25TdGF0ZUNoYW5nZSIsInB1c2giLCJhZGRGaWx0ZXIiLCJjbGVhckZpbHRlcnMiLCJyZW1vdmVGaWx0ZXIiLCJyZXNldCIsInNldEZpbHRlciIsInNldFJlc3VsdHNQZXJQYWdlIiwic2V0U2VhcmNoVGVybSIsInNldFNvcnQiLCJzZXRDdXJyZW50IiwidHJhY2tDbGlja1Rocm91Z2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0Esc0JBQVQsT0FPRztBQUFBLE1BTkRDLE9BTUMsUUFOREEsT0FNQztBQUFBLE1BTERDLE9BS0MsUUFMREEsT0FLQztBQUFBLE1BSkRDLGNBSUMsUUFKREEsY0FJQztBQUFBLE1BSERDLFVBR0MsUUFIREEsVUFHQztBQUFBLE1BRkRDLGFBRUMsUUFGREEsYUFFQztBQUFBLE1BRERDLFNBQ0MsUUFEREEsU0FDQztBQUNELFNBQU87QUFDTEwsSUFBQUEsT0FBTyxFQUFQQSxPQURLO0FBRUxDLElBQUFBLE9BQU8sRUFBUEEsT0FGSztBQUdMQyxJQUFBQSxjQUFj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YTtBQUNYLGFBQU87QUFDTEUsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBRFg7QUFFTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBRmQ7QUFHTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBSGQ7QUFJTEMsUUFBQUEsS0FBSyxFQUFFLEtBQUtBLEtBSlA7QUFLTEMsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBTFg7QUFNTEMsUUFBQUEsaUJBQWlCLEVBQUUsS0FBS0EsaUJBTm5CO0FBT0xDLFFBQUFBLGFBQWEsRUFBRSxLQUFLQSxhQVBmO0FBUUxDLFFBQUFBLE9BQU8sRUFBRSxLQUFLQSxPQVJUO0FBU0xDLFFBQUFBLFVBQVUsRUFBRSxLQUFLQSxVQVRaO0FBVUxDLFFBQUFBLGlCQUFpQixFQUFFLEtBQUtBO0FBVm5CLE9BQVA7QUFZRDtBQUVEOzs7Ozs7Ozs7K0JBTVc7QUFDVDtBQUNBO0FBQ0EsK0JBQVksS0FBS3hELEtBQWpCO0FBQ0Q7QUFFRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVUkxNYW5hZ2VyIGZyb20gXCIuL1VSTE1hbmFnZXJcIjtcblxuZnVuY3Rpb24gZmlsdGVyU2VhcmNoUGFyYW1ldGVycyh7XG4gIGN1cnJlbnQsXG4gIGZpbHRlcnMsXG4gIHJlc3VsdHNQZXJQYWdlLFxuICBzZWFyY2hUZXJtLFxuICBzb3J0RGlyZWN0aW9uLFxuICBzb3J0RmllbGRcbn0pIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50LFxuICAgIGZpbHRlcnMsXG4gICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgc2VhcmNoVGVybSxcbiAgICBzb3J0RGlyZWN0aW9uLFxuICAgIHNvcnRGaWVsZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZShmaWx0ZXJzLCBuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyKSA9PiB7XG4gICAgaWYgKGZpbHRlcltuYW1lXSkge1xuICAgICAgY29uc3QgY3VycmVudEZpbHRlclZhbHVlcyA9IGZpbHRlcltuYW1lXTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJWYWx1ZXMgPSBjdXJyZW50RmlsdGVyVmFsdWVzLmZpbHRlcihcbiAgICAgICAgZmlsdGVyVmFsdWUgPT4gIW1hdGNoRmlsdGVyKGZpbHRlclZhbHVlLCB2YWx1ZSlcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlclZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KHtcbiAgICAgICAgICBbbmFtZV06IHVwZGF0ZWRGaWx0ZXJWYWx1ZXNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjLmNvbmNhdChmaWx0ZXIpO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUQVRFID0ge1xuICAvLyBTZWFyY2ggUGFyYW1ldGVycyAtLSBUaGlzIGlzIHN0YXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5wdXQgc3RhdGUuXG4gIGN1cnJlbnQ6IDEsXG4gIGZpbHRlcnM6IFtdLFxuICByZXN1bHRzUGVyUGFnZTogMjAsXG4gIHNlYXJjaFRlcm06IFwiXCIsXG4gIHNvcnREaXJlY3Rpb246IFwiXCIsXG4gIHNvcnRGaWVsZDogXCJcIixcbiAgLy8gUmVzdWx0IFN0YXRlIC0tIFRoaXMgc3RhdGUgcmVwcmVzZW50cyBzdGF0ZSB0aGF0IGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseVxuICAvLyBhcyB0aGUgcmVzdWx0IG9mIGNoYW5naW5nIGlucHV0IHN0YXRlLlxuICBlcnJvcjogXCJcIixcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgZmFjZXRzOiB7fSxcbiAgcmVxdWVzdElkOiBcIlwiLFxuICByZXN1bHRzOiBbXSxcbiAgcmVzdWx0U2VhcmNoVGVybTogXCJcIixcbiAgdG90YWxQYWdlczogMCxcbiAgdG90YWxSZXN1bHRzOiAwLFxuICB3YXNTZWFyY2hlZDogZmFsc2Vcbn07XG5cbi8qXG4gKiBUaGlzIGZpeGVzIGFuIGlzc3VlIHdpdGggZmlsdGVyaW5nLlxuICogT3VyIGRhdGEgc3RydWN0dXJlIGZvciBmaWx0ZXJzIGFyZSB0aGUgXCJPUlwiIGZvcm1hdCBmb3IgdGhlIEFwcCBTZWFyY2hcbiAqIEFQSTpcbiAqXG4gKiAgYGBgXG4gKiAgZmlsdGVyczoge1xuICogICBhbGw6IFtcbiAqICAgIHthdXRob3I6IFtcIkNsaW50b25cIiwgXCJTaGF5XCJdfVxuICogICBdXG4gKiAgfVxuICogIGBgYFxuICpcbiAqIEhvd2V2ZXIsIHRoZSBpbnRlbnQgaXMgZm9yIHRoZW0gdG8gYmUgQU5EIGZpbHRlcnMuIFNvIHdlIG5lZWRcbiAqIHRvIGRvIGEgcXVpY2sgY2hhbmdlIGluIGZvcm1hdHRpbmcgYmVmb3JlIGFwcGx5aW5nIHRoZW0uXG4gKlxuICogIGBgYFxuICogICBmaWx0ZXJzOiB7XG4gKiAgICBhbGw6IFtcbiAqICAgICB7YXV0aG9yOiBcIkNsaW50b25cIn0sXG4gKiAgICAge2F1dGhvcjogXCJTaGF5XCJ9XG4gKiAgICBdXG4gKiAgIH1cbiAqICBgYGBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0T1JGaWx0ZXJzQXNBTkQoZmlsdGVycyA9IFtdKSB7XG4gIHJldHVybiBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGZpbHRlcilbMF07XG4gICAgcmV0dXJuIGFjYy5jb25jYXQodmFsdWVzLm1hcCh2ID0+ICh7IFtuYW1lXTogdiB9KSkpO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzKFxuICBmYWNldHMgPSB7fSxcbiAgY29uZGl0aW9uYWxGYWNldHMgPSB7fSxcbiAgZmlsdGVycyA9IFtdXG4pIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZhY2V0cykucmVkdWNlKChhY2MsIFtmYWNldEtleSwgZmFjZXRdKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldICYmXG4gICAgICB0eXBlb2YgY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICFjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0oeyBmaWx0ZXJzIH0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGFjY1tmYWNldEtleV0gPSBmYWNldDtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoRmlsdGVyKGZpbHRlcjEsIGZpbHRlcjIpIHtcbiAgcmV0dXJuIChcbiAgICBmaWx0ZXIxID09PSBmaWx0ZXIyIHx8XG4gICAgKGZpbHRlcjEuZnJvbSAmJlxuICAgICAgZmlsdGVyMS5mcm9tID09PSBmaWx0ZXIyLmZyb20gJiZcbiAgICAgIGZpbHRlcjEudG8gJiZcbiAgICAgIGZpbHRlcjEudG8gPT09IGZpbHRlcjIudG8pXG4gICk7XG59XG5cbi8qXG4gKiBUaGUgRHJpdmVyIGlzIGEgZnJhbWV3b3JrIGFnbm9zdGljIHNlYXJjaCBzdGF0ZSBtYW5hZ2VyIHRoYXQgaXMgY2FwYWJsZVxuICogc3luY2luZyBzdGF0ZSB0byB0aGUgdXJsLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2hEcml2ZXIge1xuICBzdGF0ZSA9IERFRkFVTFRfU1RBVEU7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGFwaUNvbm5lY3RvcixcbiAgICBjb25kaXRpb25hbEZhY2V0cyxcbiAgICBkaXNqdW5jdGl2ZUZhY2V0cyxcbiAgICBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MsXG4gICAgZmFjZXRzLFxuICAgIGluaXRpYWxTdGF0ZSxcbiAgICByZXN1bHRfZmllbGRzLFxuICAgIHNlYXJjaF9maWVsZHMsXG4gICAgdHJhY2tVcmxTdGF0ZSA9IHRydWVcbiAgfSkge1xuICAgIGlmICghYXBpQ29ubmVjdG9yKSB7XG4gICAgICB0aHJvdyBFcnJvcihcImFwaUNvbm5lY3RvciByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgdGhpcy5hcGlDb25uZWN0b3IgPSBhcGlDb25uZWN0b3I7XG4gICAgdGhpcy5jb25kaXRpb25hbEZhY2V0cyA9IGNvbmRpdGlvbmFsRmFjZXRzO1xuICAgIHRoaXMuZGlzanVuY3RpdmVGYWNldHMgPSBkaXNqdW5jdGl2ZUZhY2V0cztcbiAgICB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyA9IGRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncztcbiAgICB0aGlzLmZhY2V0cyA9IGZhY2V0cztcbiAgICB0aGlzLnJlc3VsdF9maWVsZHMgPSByZXN1bHRfZmllbGRzO1xuICAgIHRoaXMuc2VhcmNoX2ZpZWxkcyA9IHNlYXJjaF9maWVsZHM7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgdGhpcy50cmFja1VybFN0YXRlID0gdHJhY2tVcmxTdGF0ZTtcblxuICAgIGxldCB1cmxTdGF0ZTtcbiAgICBpZiAodHJhY2tVcmxTdGF0ZSkge1xuICAgICAgdGhpcy5VUkxNYW5hZ2VyID0gbmV3IFVSTE1hbmFnZXIoKTtcbiAgICAgIHVybFN0YXRlID0gdGhpcy5VUkxNYW5hZ2VyLmdldFN0YXRlRnJvbVVSTCgpO1xuICAgICAgdGhpcy5VUkxNYW5hZ2VyLm9uVVJMU3RhdGVDaGFuZ2UodXJsU3RhdGUgPT4ge1xuICAgICAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHsgLi4uREVGQVVMVF9TVEFURSwgLi4udXJsU3RhdGUgfSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsU3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICAvLyBSZW1lbWJlciB0aGUgc3RhdGUgdGhpcyBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXplZCBpbnRvLCBzbyB0aGF0IHdlIGNhblxuICAgIC8vIHJlc2V0IHRvIGl0IGxhdGVyLlxuICAgIHRoaXMuc3RhcnRpbmdTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5pbml0aWFsU3RhdGVcbiAgICB9O1xuXG4gICAgLy8gV2UgZmlsdGVyIHRoZXNlIGhlcmUgdG8gZGlzYWxsb3cgYW55dGhpbmcgb3RoZXIgdGhhbiB2YWxpZCBzZWFyY2hcbiAgICAvLyBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBpbiBpbml0aWFsIHN0YXRlLCBvciB1cmwgc3RhdGUuIGByZXN1bHRzYCwgZXRjLFxuICAgIC8vIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBiZSBwYXNzZWQgaW4sIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCBiYXNlZCBvblxuICAgIC8vIHRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeVxuICAgIGNvbnN0IHNlYXJjaFBhcmFtZXRlcnMgPSBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgICAgIC4uLnRoaXMuc3RhcnRpbmdTdGF0ZSxcbiAgICAgIC4uLnVybFN0YXRlXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRob3V0IGNhbGxpbmcgX3NldFN0YXRlLCBiZWNhdXNlIHdlIGRvbid0XG4gICAgLy8gd2FudCB0byB0cmlnZ2VyIGFuIHVwZGF0ZSBjYWxsYmFjaywgd2UncmUganVzdCBpbml0aWFsaXppbmcgdGhlIHN0YXRlXG4gICAgLy8gdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBpbml0aWFsIFVJIHJlbmRlclxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uc2VhcmNoUGFyYW1ldGVyc1xuICAgIH07XG5cbiAgICAvLyBXZSdsbCB0cmlnZ2VyIGFuIGluaXRpYWwgc2VhcmNoIGlmIGluaXRpYWwgcGFyYW1ldGVycyBjb250YWluXG4gICAgLy8gYSBzZWFyY2ggdGVybSBvciBmaWx0ZXJzLCBvdGhlcndpc2UsIHdlJ2xsIGp1c3Qgc2F2ZSB0aGVpciBzZWxlY3Rpb25zXG4gICAgLy8gaW4gc3RhdGUgYXMgaW5pdGlhbCB2YWx1ZXMuXG4gICAgaWYgKHNlYXJjaFBhcmFtZXRlcnMuc2VhcmNoVGVybSB8fCBzZWFyY2hQYXJhbWV0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyhzZWFyY2hQYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlU2VhcmNoUmVzdWx0cyhzZWFyY2hQYXJhbWV0ZXJzLCBza2lwUHVzaFRvVXJsID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50LFxuICAgICAgZmlsdGVycyxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2VhcmNoVGVybSxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICBzb3J0RmllbGRcbiAgICB9ID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIC4uLnNlYXJjaFBhcmFtZXRlcnNcbiAgICB9O1xuXG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2VhcmNoT3B0aW9ucyA9IHtcbiAgICAgIGRpc2p1bmN0aXZlRmFjZXRzOiB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzLFxuICAgICAgZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzOiB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyxcbiAgICAgIGZhY2V0czogcmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMoXG4gICAgICAgIHRoaXMuZmFjZXRzLFxuICAgICAgICB0aGlzLmNvbmRpdGlvbmFsRmFjZXRzLFxuICAgICAgICBmaWx0ZXJzXG4gICAgICApLFxuICAgICAgZmlsdGVyczoge1xuICAgICAgICBhbGw6IGZvcm1hdE9SRmlsdGVyc0FzQU5EKGZpbHRlcnMpXG4gICAgICB9LFxuICAgICAgcGFnZToge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICBzaXplOiByZXN1bHRzUGVyUGFnZVxuICAgICAgfSxcbiAgICAgIHJlc3VsdF9maWVsZHM6IHRoaXMucmVzdWx0X2ZpZWxkcyxcbiAgICAgIHNlYXJjaF9maWVsZHM6IHRoaXMuc2VhcmNoX2ZpZWxkc1xuICAgIH07XG5cbiAgICBpZiAoc29ydEZpZWxkICYmIHNvcnREaXJlY3Rpb24pIHtcbiAgICAgIHNlYXJjaE9wdGlvbnMuc29ydCA9IHtcbiAgICAgICAgW3NvcnRGaWVsZF06IHNvcnREaXJlY3Rpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgY3VycmVudCxcbiAgICAgIGVycm9yOiBcIlwiLFxuICAgICAgZmlsdGVycyxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2VhcmNoVGVybSxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICBzb3J0RmllbGRcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaUNvbm5lY3Rvci5zZWFyY2goc2VhcmNoVGVybSwgc2VhcmNoT3B0aW9ucykudGhlbihcbiAgICAgIHJlc3VsdExpc3QgPT4ge1xuICAgICAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICAgICAgZmFjZXRzOiByZXN1bHRMaXN0LmluZm8uZmFjZXRzIHx8IHt9LFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgcmVxdWVzdElkOiByZXN1bHRMaXN0LmluZm8ubWV0YS5yZXF1ZXN0X2lkLFxuICAgICAgICAgIHJlc3VsdHM6IHJlc3VsdExpc3QucmVzdWx0cyxcbiAgICAgICAgICByZXN1bHRTZWFyY2hUZXJtOiBzZWFyY2hUZXJtLFxuICAgICAgICAgIHRvdGFsUGFnZXM6IHJlc3VsdExpc3QuaW5mby5tZXRhLnBhZ2UudG90YWxfcGFnZXMsXG4gICAgICAgICAgdG90YWxSZXN1bHRzOiByZXN1bHRMaXN0LmluZm8ubWV0YS5wYWdlLnRvdGFsX3Jlc3VsdHMsXG4gICAgICAgICAgd2FzU2VhcmNoZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFza2lwUHVzaFRvVXJsICYmIHRoaXMudHJhY2tVcmxTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuVVJMTWFuYWdlci5wdXNoU3RhdGVUb1VSTCh7XG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgICAgICAgc2VhcmNoVGVybSxcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICBzb3J0RmllbGRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgICAgICBlcnJvcjogYEFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQ6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBfc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHsgLi4udGhpcy5zdGF0ZSwgLi4ubmV3U3RhdGUgfTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uKHN0YXRlKSk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFueSB0aW1lIHN0YXRlIGlzIHVwZGF0ZWQgaW4gdGhpcyBEcml2ZXIsIHRoZSBwcm92aWRlZCBjYWxsYmFja1xuICAgKiB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggdGhlIHVwZGF0ZWQgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBvblN0YXRlQ2hhbmdlIEZ1bmN0aW9uXG4gICAqL1xuICBzdWJzY3JpYmVUb1N0YXRlQ2hhbmdlcyhvblN0YXRlQ2hhbmdlKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gob25TdGF0ZUNoYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBhdmFpbGFibGUgYWNpdG9uc1xuICAgKlxuICAgKiBAcmV0dXJucyBPYmplY3QgQWxsIGFjdGlvbnNcbiAgICovXG4gIGdldEFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZEZpbHRlcjogdGhpcy5hZGRGaWx0ZXIsXG4gICAgICBjbGVhckZpbHRlcnM6IHRoaXMuY2xlYXJGaWx0ZXJzLFxuICAgICAgcmVtb3ZlRmlsdGVyOiB0aGlzLnJlbW92ZUZpbHRlcixcbiAgICAgIHJlc2V0OiB0aGlzLnJlc2V0LFxuICAgICAgc2V0RmlsdGVyOiB0aGlzLnNldEZpbHRlcixcbiAgICAgIHNldFJlc3VsdHNQZXJQYWdlOiB0aGlzLnNldFJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2V0U2VhcmNoVGVybTogdGhpcy5zZXRTZWFyY2hUZXJtLFxuICAgICAgc2V0U29ydDogdGhpcy5zZXRTb3J0LFxuICAgICAgc2V0Q3VycmVudDogdGhpcy5zZXRDdXJyZW50LFxuICAgICAgdHJhY2tDbGlja1Rocm91Z2g6IHRoaXMudHJhY2tDbGlja1Rocm91Z2hcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGN1cnJlbnQgc3RhdGUuIFR5cGljYWxseSB1c2VkIG9uIGFwcCBpbml0aWFsaXphdGlvbi4gU3Vic2VxdWVudFxuICAgKiBzdGF0ZSB1cGRhdGVzIHNob3VsZCBjb21lIHRocm91Z2ggc3Vic2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYmplY3QgQ3VycmVudCBzdGF0ZVxuICAgKi9cbiAgZ2V0U3RhdGUoKSB7XG4gICAgLy8gV2UgcmV0dXJuIGEgY29weSBvZiBzdGF0ZSBoZXJlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZW5zdXJlIHRoZSBzdGF0ZVxuICAgIC8vIGluc2lkZSBvZiB0aGlzIG9iamVjdCByZW1haW5zIGltbXV0YWJsZS5cbiAgICByZXR1cm4geyAuLi50aGlzLnN0YXRlIH07XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHJlc3VsdHMgLSBBZGRzIHRvIGN1cnJlbnQgZmlsdGVyIHZhbHVlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIHRvIGZpbHRlciBvblxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIGZpZWxkIHZhbHVlIHRvIGZpbHRlciBvblxuICAgKi9cbiAgYWRkRmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgZXhpc3RpbmdGaWx0ZXJWYWx1ZXMgPSAoZmlsdGVycy5maW5kKGYgPT4gZltuYW1lXSkgfHwge30pW25hbWVdIHx8IFtdO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWVzID0gZXhpc3RpbmdGaWx0ZXJWYWx1ZXMuZmluZChleGlzdGluZyA9PlxuICAgICAgbWF0Y2hGaWx0ZXIoZXhpc3RpbmcsIHZhbHVlKVxuICAgIClcbiAgICAgID8gZXhpc3RpbmdGaWx0ZXJWYWx1ZXNcbiAgICAgIDogZXhpc3RpbmdGaWx0ZXJWYWx1ZXMuY29uY2F0KHZhbHVlKTtcblxuICAgIGNvbnN0IGZpbHRlcnNXaXRob3V0VGFyZ2V0RmlsdGVyID0gZmlsdGVycy5maWx0ZXIoZiA9PiAhZltuYW1lXSk7XG5cbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIsIHsgW25hbWVdOiBuZXdGaWx0ZXJWYWx1ZXMgfV1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRmlsdGVyIHJlc3VsdHMgLSBSZXBsYWNlcyBjdXJyZW50IGZpbHRlciB2YWx1ZVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBTdHJpbmcgZmllbGQgbmFtZSB0byBmaWx0ZXIgb25cbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyBmaWVsZCB2YWx1ZSB0byBmaWx0ZXIgb25cbiAgICovXG4gIHNldEZpbHRlciA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGxldCB7IGZpbHRlcnMgfSA9IHRoaXMuc3RhdGU7XG4gICAgZmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdICE9PSBuYW1lKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzLCB7IFtuYW1lXTogW3ZhbHVlXSB9XVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNldCBzZWFyY2ggZXhwZXJpZW5jZSB0byBpbml0aWFsIHN0YXRlXG4gICAqXG4gICAqL1xuICByZXNldCA9ICgpID0+IHtcbiAgICB0aGlzLl9zZXRTdGF0ZSh0aGlzLnN0YXJ0aW5nU3RhdGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgZmlsdGVyIGZyb20gcmVzdWx0c1xuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBTdHJpbmcgZmllbGQgbmFtZSBmb3IgZmlsdGVyIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIChPcHRpb25hbCkgZmllbGQgdmFsdWUgZm9yIGZpbHRlciB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUZpbHRlciA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0gdmFsdWVcbiAgICAgID8gcmVtb3ZlU2luZ2xlRmlsdGVyVmFsdWUoZmlsdGVycywgbmFtZSwgdmFsdWUpXG4gICAgICA6IGZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhZmlsdGVyW25hbWVdKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgZmlsdGVyc1xuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gZXhjZXB0IEFycmF5W1N0cmluZ10gZmllbGQgbmFtZSBvZiBhbnkgZmlsdGVycyB0aGF0IHNob3VsZCByZW1haW5cbiAgICovXG4gIGNsZWFyRmlsdGVycyA9IChleGNlcHQgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlckZpZWxkID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICAgIHJldHVybiBleGNlcHQuaW5jbHVkZXMoZmlsdGVyRmllbGQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnNcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSByZXN1bHRzUGVyUGFnZSBJbnRlZ2VyXG4gICAqL1xuICBzZXRSZXN1bHRzUGVyUGFnZSA9IHJlc3VsdHNQZXJQYWdlID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICByZXN1bHRzUGVyUGFnZVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgc2VhcmNoIHRlcm1cbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHNlYXJjaFRlcm0gU3RyaW5nXG4gICAqL1xuICBzZXRTZWFyY2hUZXJtID0gc2VhcmNoVGVybSA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogW10sXG4gICAgICBzZWFyY2hUZXJtXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBzb3J0XG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBzb3J0RmllbGQgU3RyaW5nXG4gICAqIEBwYXJhbSBzb3J0RGlyZWN0aW9uIFN0cmluZyBbXCJhc2NcInxcImRlc2NcIl1cbiAgICovXG4gIHNldFNvcnQgPSAoc29ydEZpZWxkLCBzb3J0RGlyZWN0aW9uKSA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgcGFnZVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudCBJbnRlZ2VyXG4gICAqL1xuICBzZXRDdXJyZW50ID0gY3VycmVudCA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBhIGNsaWNrIHRocm91Z2ggZXZlbnQuIEEgY2xpY2sgdGhyb3VnaCBldmVudCBpcyB3aGVuIGEgdXNlclxuICAgKiBjbGlja3Mgb24gYSByZXN1bHQgbGluay4gQ2xpY2sgZXZlbnRzIGNhbiBiZSByZXZpZXdlZCBpbiB0aGUgQXBwIFNlYXJjaFxuICAgKiBBbmFseXRpY3MgRGFzaGJvYXJkLlxuICAgKlxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCBTdHJpbmcgVGhlIGRvY3VtZW50IElEIGFzc29jaWF0ZWQgd2l0aCByZXN1bHQgdGhhdCB3YXNcbiAgICogY2xpY2tlZFxuICAgKiBAcGFyYW0gdGFnIEFycmF5W1N0cmluZ10gT3B0aW9uYWwgVGFncyB3aGljaCBjYW4gYmUgdXNlZCB0byBjYXRlZ29yaXplXG4gICAqIHRoaXMgY2xpY2sgZXZlbnRcbiAgICovXG4gIHRyYWNrQ2xpY2tUaHJvdWdoID0gKGRvY3VtZW50SWQsIHRhZ3MgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHsgcmVxdWVzdElkLCBzZWFyY2hUZXJtIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgdGhpcy5hcGlDb25uZWN0b3IuY2xpY2soe1xuICAgICAgcXVlcnk6IHNlYXJjaFRlcm0sXG4gICAgICBkb2N1bWVudElkLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgdGFnc1xuICAgIH0pO1xuICB9O1xufVxuIl19 |
{ | ||
"name": "@elastic/search-ui", | ||
"version": "0.2.1", | ||
"version": "0.3.0", | ||
"description": "A Headless Search UI library", | ||
@@ -5,0 +5,0 @@ "license": "Apache-2.0", |
157790
1213