UNPKG

@future-grid/fgp-graph

Version:

fgp-graph is a chart lib based on Dygraphs

155 lines (120 loc) 19.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _utils = _interopRequireDefault(require("../../utils")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var Intervals = function Intervals(parentElement, viewConfig, g, intervalSelectionListener) { var _this = this; _classCallCheck(this, Intervals); this.parentElement = parentElement; this.viewConfig = viewConfig; this.g = g; this.intervalSelectionListener = intervalSelectionListener; _defineProperty(this, "dateWindow", [0, 0]); _defineProperty(this, "dateRange", [0, 0]); _defineProperty(this, "collection", void 0); _defineProperty(this, "options", void 0); _defineProperty(this, "dropdownOptions", void 0); _defineProperty(this, "initDom", function () { var _this$viewConfig$rang; // dropdown container var dropdownContainer = document.createElement('div'); dropdownContainer.setAttribute("class", "fgp-intervals-dropdown"); // create select var select = document.createElement("select"); //sort (_this$viewConfig$rang = _this.viewConfig.ranges) === null || _this$viewConfig$rang === void 0 ? void 0 : _this$viewConfig$rang.sort(function (current, next) { return next.value - current.value; }); // if (_this.viewConfig.ranges) { _this.viewConfig.ranges.forEach(function (_range) { var option = document.createElement('option'); option.text = _range.name; option.value = _range.value.toString(); option.selected = !!_range.show; select.add(option); _this.dropdownOptions.push(option); _this.options.push({ label: _range.name, value: _range.value }); }); // } select.addEventListener("change", function (e) { // get config var chosenInterval = _this.viewConfig.ranges ? _this.viewConfig.ranges[select.selectedIndex] : null; if (chosenInterval && _this.dateWindow) { // get the middle timestamp of current timeWindow. var middleDatetime = _this.dateWindow[0] + (_this.dateWindow[1] - _this.dateWindow[0]) / 2; var halfConfigRequire = chosenInterval.value / 2; var start = middleDatetime - halfConfigRequire > _this.dateRange[0] ? middleDatetime - halfConfigRequire : _this.dateRange[0]; var end = middleDatetime + halfConfigRequire > _this.dateRange[1] ? _this.dateRange[1] : middleDatetime + halfConfigRequire; // fix 2 sides problem if (middleDatetime + halfConfigRequire > _this.dateRange[1]) { end = _this.dateRange[1]; start = end - chosenInterval.value; if (start < _this.dateRange[0]) { start = _this.dateRange[0]; } } else if (middleDatetime - halfConfigRequire < _this.dateRange[0]) { start = _this.dateRange[0]; end = start + chosenInterval.value; if (end > _this.dateRange[1]) { end = _this.dateRange[1]; } } var potentialDateWindow = [start, end]; // find collection base on new date window var chosenCollection = _utils["default"].findBestCollection(_this.collection, potentialDateWindow); if (_this.intervalSelectionListener && chosenCollection) { _this.intervalSelectionListener(chosenCollection, potentialDateWindow); } } }); dropdownContainer.appendChild(select); // add container to header _this.parentElement.appendChild(dropdownContainer); }); _defineProperty(this, "setDateWindow", function (dateWindow, dateRange) { // check if different if (_this.dateWindow[0] !== dateWindow[0] || _this.dateWindow[1] !== dateWindow[1]) { _this.dateWindow = [dateWindow[0], dateWindow[1]]; } if (_this.dateRange[0] !== dateRange[0] || _this.dateRange[1] !== dateRange[1]) { _this.dateRange = [dateRange[0], dateRange[1]]; } // find best option for dropdown base on date window // if (this.options) { // // find best one // const gap = this.dateWindow[1] - this.dateWindow[0]; // let bestInterval: { label: string, value: number } | undefined = undefined; // if (this.options[0] && gap >= this.options[0].value) { // bestInterval = this.options[0]; // } else { // bestInterval = this.options.find((op, index) => { // if (this.options[index - 1]) { // return gap >= op.value && gap < (this.options[index - 1].value); // } // }); // } // // if options doesn't exist, ignore it. // if (!bestInterval && this.options && this.options.length > 0) { // // check if gap less than the smallest one // if (gap <= this.options[this.options.length - 1].value) { // bestInterval = this.options[this.options.length - 1]; // } // } // if (bestInterval) { // console.log(`Best: ${bestInterval?.label}, Gap: ${new Date(this.dateWindow[0])} ${new Date(this.dateWindow[1])}`); // // reset selection // this.dropdownOptions.forEach(op => { // op.selected = bestInterval?.label === op.text; // }) // } // } }); this.collection = viewConfig.graphConfig.collections; this.options = []; this.dropdownOptions = []; this.initDom(); }; exports["default"] = Intervals; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9leHRyYXMvdG9vbGJhci93aWRnZXRzL0ludGVydmFscy50cyJdLCJuYW1lcyI6WyJJbnRlcnZhbHMiLCJwYXJlbnRFbGVtZW50Iiwidmlld0NvbmZpZyIsImciLCJpbnRlcnZhbFNlbGVjdGlvbkxpc3RlbmVyIiwiZHJvcGRvd25Db250YWluZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzZWxlY3QiLCJyYW5nZXMiLCJzb3J0IiwiY3VycmVudCIsIm5leHQiLCJ2YWx1ZSIsImZvckVhY2giLCJfcmFuZ2UiLCJvcHRpb24iLCJ0ZXh0IiwibmFtZSIsInRvU3RyaW5nIiwic2VsZWN0ZWQiLCJzaG93IiwiYWRkIiwiZHJvcGRvd25PcHRpb25zIiwicHVzaCIsIm9wdGlvbnMiLCJsYWJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiY2hvc2VuSW50ZXJ2YWwiLCJzZWxlY3RlZEluZGV4IiwiZGF0ZVdpbmRvdyIsIm1pZGRsZURhdGV0aW1lIiwiaGFsZkNvbmZpZ1JlcXVpcmUiLCJzdGFydCIsImRhdGVSYW5nZSIsImVuZCIsInBvdGVudGlhbERhdGVXaW5kb3ciLCJjaG9zZW5Db2xsZWN0aW9uIiwidXRpbHMiLCJmaW5kQmVzdENvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwiYXBwZW5kQ2hpbGQiLCJncmFwaENvbmZpZyIsImNvbGxlY3Rpb25zIiwiaW5pdERvbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7OztJQUVxQkEsUyxHQWFqQixtQkFBbUJDLGFBQW5CLEVBQWtEQyxVQUFsRCxFQUFpRkMsQ0FBakYsRUFBcUdDLHlCQUFyRyxFQUFzTTtBQUFBOztBQUFBOztBQUFBLE9BQW5MSCxhQUFtTCxHQUFuTEEsYUFBbUw7QUFBQSxPQUFwSkMsVUFBb0osR0FBcEpBLFVBQW9KO0FBQUEsT0FBckhDLENBQXFILEdBQXJIQSxDQUFxSDtBQUFBLE9BQWpHQyx5QkFBaUcsR0FBakdBLHlC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R0FBZSxFQUFmO0FBQ0EsT0FBS0YsZUFBTCxHQUF1QixFQUF2QjtBQUNBLE9BQUtzQixPQUFMO0FBQ0gsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoQ29sbGVjdGlvbiwgVmlld0NvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tZXRhZGF0YS9jb25maWd1cmF0aW9uc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi8uLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnRlcnZhbHMge1xuXG4gICAgcHJpdmF0ZSBkYXRlV2luZG93OiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDBdO1xuXG4gICAgcHJpdmF0ZSBkYXRlUmFuZ2U6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMF07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbGxlY3Rpb246IEdyYXBoQ29sbGVjdGlvbltdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfT47XG5cbiAgICBwcml2YXRlIGRyb3Bkb3duT3B0aW9uczogQXJyYXk8SFRNTE9wdGlvbkVsZW1lbnQ+O1xuXG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50RWxlbWVudDogRWxlbWVudCwgcHVibGljIHZpZXdDb25maWc6IFZpZXdDb25maWcsIHB1YmxpYyBnPzogRHlncmFwaCwgcHVibGljIGludGVydmFsU2VsZWN0aW9uTGlzdGVuZXI/OiAoY29sbGVjdGlvbjogR3JhcGhDb2xsZWN0aW9uLCBkYXRlV2luZG93OiBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IHZpZXdDb25maWcuZ3JhcGhDb25maWcuY29sbGVjdGlvbnM7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmluaXREb20oKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgaW5pdERvbSA9ICgpID0+IHtcbiAgICAgICAgLy8gZHJvcGRvd24gY29udGFpbmVyXG4gICAgICAgIGxldCBkcm9wZG93bkNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZHJvcGRvd25Db250YWluZXIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJmZ3AtaW50ZXJ2YWxzLWRyb3Bkb3duXCIpO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBzZWxlY3RcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcblxuICAgICAgICAvL3NvcnRcblxuICAgICAgICB0aGlzLnZpZXdDb25maWcucmFuZ2VzPy5zb3J0KChjdXJyZW50LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSAtIGN1cnJlbnQudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICAvL1xuICAgICAgICBpZiAodGhpcy52aWV3Q29uZmlnLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29uZmlnLnJhbmdlcy5mb3JFYWNoKF9yYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnRleHQgPSBfcmFuZ2UubmFtZTtcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWUgPSBfcmFuZ2UudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSAhIV9yYW5nZS5zaG93O1xuICAgICAgICAgICAgICAgIHNlbGVjdC5hZGQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2goeyBsYWJlbDogX3JhbmdlLm5hbWUsIHZhbHVlOiBfcmFuZ2UudmFsdWUgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vXG5cblxuXG4gICAgICAgIH1cblxuICAgICAgICBzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIGdldCBjb25maWdcbiAgICAgICAgICAgIGNvbnN0IGNob3NlbkludGVydmFsID0gdGhpcy52aWV3Q29uZmlnLnJhbmdlcyA/IHRoaXMudmlld0NvbmZpZy5yYW5nZXNbc2VsZWN0LnNlbGVjdGVkSW5kZXhdIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKGNob3NlbkludGVydmFsICYmIHRoaXMuZGF0ZVdpbmRvdykge1xuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgbWlkZGxlIHRpbWVzdGFtcCBvZiBjdXJyZW50IHRpbWVXaW5kb3cuXG4gICAgICAgICAgICAgICAgbGV0IG1pZGRsZURhdGV0aW1lID0gdGhpcy5kYXRlV2luZG93WzBdICsgKHRoaXMuZGF0ZVdpbmRvd1sxXSAtIHRoaXMuZGF0ZVdpbmRvd1swXSkgLyAyO1xuICAgICAgICAgICAgICAgIGxldCBoYWxmQ29uZmlnUmVxdWlyZSA9IGNob3NlbkludGVydmFsLnZhbHVlIC8gMjtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSAobWlkZGxlRGF0ZXRpbWUgLSBoYWxmQ29uZmlnUmVxdWlyZSkgPiB0aGlzLmRhdGVSYW5nZVswXSA/IChtaWRkbGVEYXRldGltZSAtIGhhbGZDb25maWdSZXF1aXJlKSA6IHRoaXMuZGF0ZVJhbmdlWzBdO1xuICAgICAgICAgICAgICAgIGxldCBlbmQgPSAobWlkZGxlRGF0ZXRpbWUgKyBoYWxmQ29uZmlnUmVxdWlyZSkgPiB0aGlzLmRhdGVSYW5nZVsxXSA/IHRoaXMuZGF0ZVJhbmdlWzFdIDogKG1pZGRsZURhdGV0aW1lICsgaGFsZkNvbmZpZ1JlcXVpcmUpO1xuICAgICAgICAgICAgICAgIC8vIGZpeCAyIHNpZGVzIHByb2JsZW1cbiAgICAgICAgICAgICAgICBpZiAoKG1pZGRsZURhdGV0aW1lICsgaGFsZkNvbmZpZ1JlcXVpcmUpID4gdGhpcy5kYXRlUmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gdGhpcy5kYXRlUmFuZ2VbMV07XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gY2hvc2VuSW50ZXJ2YWwudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IHRoaXMuZGF0ZVJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuZGF0ZVJhbmdlWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobWlkZGxlRGF0ZXRpbWUgLSBoYWxmQ29uZmlnUmVxdWlyZSkgPCB0aGlzLmRhdGVSYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuZGF0ZVJhbmdlWzBdO1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIGNob3NlbkludGVydmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID4gdGhpcy5kYXRlUmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHRoaXMuZGF0ZVJhbmdlWzFdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHBvdGVudGlhbERhdGVXaW5kb3c6IFtudW1iZXIsIG51bWJlcl0gPSBbc3RhcnQsIGVuZF07XG4gICAgICAgICAgICAgICAgLy8gZmluZCBjb2xsZWN0aW9uIGJhc2Ugb24gbmV3IGRhdGUgd2luZG93XG4gICAgICAgICAgICAgICAgY29uc3QgY2hvc2VuQ29sbGVjdGlvbiA9IHV0aWxzLmZpbmRCZXN0Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24sIHBvdGVudGlhbERhdGVXaW5kb3cpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWxTZWxlY3Rpb25MaXN0ZW5lciAmJiBjaG9zZW5Db2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxTZWxlY3Rpb25MaXN0ZW5lcihjaG9zZW5Db2xsZWN0aW9uLCBwb3RlbnRpYWxEYXRlV2luZG93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGVjdCk7XG4gICAgICAgIC8vIGFkZCBjb250YWluZXIgdG8gaGVhZGVyXG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChkcm9wZG93bkNvbnRhaW5lcik7XG4gICAgfTtcblxuICAgIHB1YmxpYyBzZXREYXRlV2luZG93ID0gKGRhdGVXaW5kb3c6IEFycmF5PG51bWJlcj4sIGRhdGVSYW5nZTogQXJyYXk8bnVtYmVyPikgPT4ge1xuICAgICAgICAvLyBjaGVjayBpZiBkaWZmZXJlbnRcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVdpbmRvd1swXSAhPT0gZGF0ZVdpbmRvd1swXSB8fCB0aGlzLmRhdGVXaW5kb3dbMV0gIT09IGRhdGVXaW5kb3dbMV0pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVdpbmRvdyA9IFtkYXRlV2luZG93WzBdLCBkYXRlV2luZG93WzFdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGVSYW5nZVswXSAhPT0gZGF0ZVJhbmdlWzBdIHx8IHRoaXMuZGF0ZVJhbmdlWzFdICE9PSBkYXRlUmFuZ2VbMV0pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW2RhdGVSYW5nZVswXSwgZGF0ZVJhbmdlWzFdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmQgYmVzdCBvcHRpb24gZm9yIGRyb3Bkb3duIGJhc2Ugb24gZGF0ZSB3aW5kb3dcbiAgICAgICAgLy8gaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgICAvLyAgICAgLy8gZmluZCBiZXN0IG9uZVxuICAgICAgICAvLyAgICAgY29uc3QgZ2FwID0gdGhpcy5kYXRlV2luZG93WzFdIC0gdGhpcy5kYXRlV2luZG93WzBdO1xuXG4gICAgICAgIC8vICAgICBsZXQgYmVzdEludGVydmFsOiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyAgICAgaWYgKHRoaXMub3B0aW9uc1swXSAmJiBnYXAgPj0gdGhpcy5vcHRpb25zWzBdLnZhbHVlKSB7XG4gICAgICAgIC8vICAgICAgICAgYmVzdEludGVydmFsID0gdGhpcy5vcHRpb25zWzBdO1xuICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICBiZXN0SW50ZXJ2YWwgPSB0aGlzLm9wdGlvbnMuZmluZCgob3AsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbaW5kZXggLSAxXSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGdhcCA+PSBvcC52YWx1ZSAmJiBnYXAgPCAodGhpcy5vcHRpb25zW2luZGV4IC0gMV0udmFsdWUpO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgfSk7XG4gICAgICAgIC8vICAgICB9XG5cbiAgICAgICAgICAgIFxuICAgICAgICAvLyAgICAgLy8gaWYgb3B0aW9ucyBkb2Vzbid0IGV4aXN0LCBpZ25vcmUgaXQuXG4gICAgICAgIC8vICAgICBpZiAoIWJlc3RJbnRlcnZhbCAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgICAvLyBjaGVjayBpZiBnYXAgbGVzcyB0aGFuIHRoZSBzbWFsbGVzdCBvbmVcbiAgICAgICAgLy8gICAgICAgICBpZiAoZ2FwIDw9IHRoaXMub3B0aW9uc1t0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMV0udmFsdWUpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgYmVzdEludGVydmFsID0gdGhpcy5vcHRpb25zW3RoaXMub3B0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG5cbiAgICAgICAgLy8gICAgIGlmIChiZXN0SW50ZXJ2YWwpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhgQmVzdDogJHtiZXN0SW50ZXJ2YWw/LmxhYmVsfSwgR2FwOiAke25ldyBEYXRlKHRoaXMuZGF0ZVdpbmRvd1swXSl9ICR7bmV3IERhdGUodGhpcy5kYXRlV2luZG93WzFdKX1gKTtcbiAgICAgICAgLy8gICAgICAgICAvLyByZXNldCBzZWxlY3Rpb25cbiAgICAgICAgLy8gICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucy5mb3JFYWNoKG9wID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgb3Auc2VsZWN0ZWQgPSBiZXN0SW50ZXJ2YWw/LmxhYmVsID09PSBvcC50ZXh0O1xuICAgICAgICAvLyAgICAgICAgIH0pXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cblxuXG4gICAgfTtcblxufSJdfQ==