diff --git a/README.md b/README.md index 1032ee5..dd3c9e3 100644 --- a/README.md +++ b/README.md @@ -172,7 +172,7 @@ Or just define them on the component className: '', // Set the classname of the `th/td` element of the column innerClassName: '', // Set the classname of the `.th-inner/.td-inner` element of the column columns: [...] // See Header Groups section below - render: JSX eg. ({row, value, index}) => {value}, // Provide a JSX element or stateless function to render whatever you want as the column's cell with access to the entire row + render: JSX eg. ({row, value, index, viewIndex}) => {value}, // Provide a JSX element or stateless function to render whatever you want as the column's cell with access to the entire row sortable: true, sort: 'asc' or 'desc', show: true, diff --git a/lib/index.js b/lib/index.js index 3680f77..dbf78fe 100644 --- a/lib/index.js +++ b/lib/index.js @@ -266,9 +266,10 @@ exports.default = _react2.default.createClass({ accessData: function accessData(data) { var _this3 = this; - return data.map(function (d) { + return data.map(function (d, i) { var row = { - __original: d + __original: d, + __index: i }; _this3.decoratedColumns.forEach(function (column) { row[column.id] = column.accessor(d); @@ -420,7 +421,8 @@ exports.default = _react2.default.createClass({ typeof Cell === 'function' ? _react2.default.createElement(Cell, { value: row[column.id], row: row.__original, - index: i + index: row.__index, + viewIndex: i }) : typeof Cell !== 'undefined' ? Cell : row[column.id] ) ); @@ -627,4 +629,4 @@ function clone(a) { function isArray(a) { return Array.isArray(a); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJfIiwiZ2V0IiwidGFrZVJpZ2h0IiwibGFzdCIsIm9yZGVyQnkiLCJyYW5nZSIsImNsb25lIiwicmVtb3ZlIiwiZGVmYXVsdEJ1dHRvbiIsInByb3BzIiwiY2hpbGRyZW4iLCJSZWFjdFRhYmxlRGVmYXVsdHMiLCJjbGFzc05hbWUiLCJ0YWJsZUNsYXNzTmFtZSIsInRoZWFkQ2xhc3NOYW1lIiwidGJvZHlDbGFzc05hbWUiLCJ0ckNsYXNzTmFtZSIsInBhZ2luYXRpb25DbGFzc05hbWUiLCJwYWdlU2l6ZSIsIm1pblJvd3MiLCJjb2x1bW4iLCJzb3J0YWJsZSIsInNob3ciLCJwcmV2aW91c1RleHQiLCJuZXh0VGV4dCIsImxvYWRpbmdUZXh0IiwidGFibGVDb21wb25lbnQiLCJ0aGVhZENvbXBvbmVudCIsInRib2R5Q29tcG9uZW50IiwidHJDb21wb25lbnQiLCJ0aENvbXBvbmVudCIsInRkQ29tcG9uZW50IiwicHJldmlvdXNDb21wb25lbnQiLCJuZXh0Q29tcG9uZW50IiwiZGF0YSIsImNyZWF0ZUNsYXNzIiwiZ2V0RGVmYXVsdFByb3BzIiwiZ2V0SW5pdGlhbFN0YXRlIiwic29ydGluZyIsImNvbXBvbmVudFdpbGxNb3VudCIsInVwZGF0ZSIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJuZXh0UHJvcHMiLCJyZXNldFN0YXRlIiwibG9hZGluZyIsInBhZ2UiLCJwYWdlcyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzdGF0ZSIsImlzQXN5bmMiLCJidWlsZENvbHVtbnMiLCJidWlsZERhdGEiLCJoYXNIZWFkZXJHcm91cHMiLCJjb2x1bW5zIiwiZm9yRWFjaCIsImhlYWRlckdyb3VwcyIsImRlY29yYXRlZENvbHVtbnMiLCJjdXJyZW50U3BhbiIsImFkZEhlYWRlciIsInB1c2giLCJtYWtlRGVjb3JhdGVkQ29sdW1uIiwiZGNvbCIsImFjY2Vzc29yIiwiaWQiLCJhY2Nlc3NvclN0cmluZyIsInJvdyIsImNvbnNvbGUiLCJ3YXJuIiwiaSIsIm5lc3RlZENvbHVtbiIsImxlbmd0aCIsImdldEluaXRTb3J0aW5nIiwiaW5pdFNvcnRpbmciLCJmaWx0ZXIiLCJkIiwic29ydCIsIm1hcCIsImFzYyIsInNldERhdGEiLCJjYiIsInJlcyIsIlByb21pc2UiLCJyZWplY3QiLCJhY2Nlc3NlZERhdGEiLCJhY2Nlc3NEYXRhIiwicm93cyIsImRhdGFSZXMiLCJ0aGVuIiwic29ydGVkRGF0YSIsInNvcnREYXRhIiwiX19vcmlnaW5hbCIsInJlc29sdmVkU29ydGluZyIsInVuZGVmaW5lZCIsIkluZmluaXR5IiwidG9Mb3dlckNhc2UiLCJzZXRQYWdlIiwicmVuZGVyIiwicGFnZXNMZW5ndGgiLCJNYXRoIiwiY2VpbCIsInN0YXJ0Um93IiwiZW5kUm93IiwicGFnZVJvd3MiLCJzbGljZSIsInBhZFJvd3MiLCJtYXgiLCJjYW5QcmV2aW91cyIsImNhbk5leHQiLCJUYWJsZUNvbXBvbmVudCIsIlRoZWFkQ29tcG9uZW50IiwiVGJvZHlDb21wb25lbnQiLCJUckNvbXBvbmVudCIsIlRoQ29tcG9uZW50IiwiVGRDb21wb25lbnQiLCJQcmV2aW91c0NvbXBvbmVudCIsIk5leHRDb21wb25lbnQiLCJpbm5lckNsYXNzTmFtZSIsImhlYWRlciIsImZpbmQiLCJlIiwic29ydENvbHVtbiIsInNoaWZ0S2V5Iiwid2lkdGgiLCJtaW5XaWR0aCIsImkyIiwiQ2VsbCIsImhpZGRlbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWRkaXRpdmUiLCJleGlzdGluZ1NvcnRpbmciLCJleGlzdGluZ0luZGV4IiwiZmluZEluZGV4IiwiZXhpc3RpbmciLCJzcGxpY2UiLCJwcmV2ZW50RGVmYXVsdCIsImEiLCJiIiwibyIsInIiLCJpc0FycmF5Iiwiam9pbiIsInJlcGxhY2UiLCJzcGxpdCIsInJlZHVjZSIsIm9iaiIsInByb3BlcnR5IiwiYXJyIiwibiIsInN0YXJ0IiwiZnVuY3MiLCJkaXJzIiwiY29tcCIsImNhIiwiZGVzYyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImtleSIsInZhbHVlIiwidG9TdHJpbmciLCJBcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7Ozs7O0FBQ0E7QUFDQSxJQUFNQSxJQUFJO0FBQ1JDLFVBRFE7QUFFUkMsc0JBRlE7QUFHUkMsWUFIUTtBQUlSQyxrQkFKUTtBQUtSQyxjQUxRO0FBTVJDLGNBTlE7QUFPUkM7QUFQUSxDQUFWOztBQVVBLElBQU1DLGdCQUFnQixTQUFoQkEsYUFBZ0IsQ0FBQ0MsS0FBRDtBQUFBLFNBQ3BCO0FBQUE7QUFBQSxpQkFBWUEsS0FBWixJQUFtQixXQUFVLE1BQTdCO0FBQXFDQSxVQUFNQztBQUEzQyxHQURvQjtBQUFBLENBQXRCOztBQUlPLElBQU1DLGtEQUFxQjtBQUNoQztBQUNBQyxhQUFXLHFCQUZxQjtBQUdoQ0Msa0JBQWdCLEVBSGdCO0FBSWhDQyxrQkFBZ0IsRUFKZ0I7QUFLaENDLGtCQUFnQixFQUxnQjtBQU1oQ0MsZUFBYSxFQU5tQjtBQU9oQ0MsdUJBQXFCLEVBUFc7QUFRaEM7QUFDQUMsWUFBVSxFQVRzQjtBQVVoQ0MsV0FBUyxDQVZ1QjtBQVdoQztBQUNBQyxVQUFRO0FBQ05DLGNBQVUsSUFESjtBQUVOQyxVQUFNO0FBRkEsR0Fad0I7QUFnQmhDO0FBQ0FDLGdCQUFjLFVBakJrQjtBQWtCaENDLFlBQVUsTUFsQnNCO0FBbUJoQ0MsZUFBYSxZQW5CbUI7QUFvQmhDO0FBQ0FDLGtCQUFnQix3QkFBQ2pCLEtBQUQ7QUFBQSxXQUFXO0FBQUE7QUFBV0EsV0FBWDtBQUFtQkEsWUFBTUM7QUFBekIsS0FBWDtBQUFBLEdBckJnQjtBQXNCaENpQixrQkFBZ0Isd0JBQUNsQixLQUFEO0FBQUEsV0FBVztBQUFBO0FBQVdBLFdBQVg7QUFBbUJBLFlBQU1DO0FBQXpCLEtBQVg7QUFBQSxHQXRCZ0I7QUF1QmhDa0Isa0JBQWdCLHdCQUFDbkIsS0FBRDtBQUFBLFdBQVc7QUFBQTtBQUFXQSxXQUFYO0FBQW1C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SUQsS0FBSzFFLEVBQVQsRUFBYTtBQUNYLGVBQU8yRSxPQUFPLENBQVAsR0FBVyxDQUFDLENBQW5CO0FBQ0Q7QUFDRjtBQUNELFdBQU8sQ0FBUDtBQUNELEdBZE0sQ0FBUDtBQWVEOztBQUVELFNBQVN2SixLQUFULENBQWdCcUksQ0FBaEIsRUFBbUI7QUFDakIsU0FBT21CLEtBQUtDLEtBQUwsQ0FBV0QsS0FBS0UsU0FBTCxDQUFlckIsQ0FBZixFQUFrQixVQUFVc0IsR0FBVixFQUFlQyxLQUFmLEVBQXNCO0FBQ3hELFFBQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQztBQUMvQixhQUFPQSxNQUFNQyxRQUFOLEVBQVA7QUFDRDtBQUNELFdBQU9ELEtBQVA7QUFDRCxHQUxpQixDQUFYLENBQVA7QUFNRDs7QUFFRDtBQUNBO0FBQ0E7O0FBRUEsU0FBU25CLE9BQVQsQ0FBa0JKLENBQWxCLEVBQXFCO0FBQ25CLFNBQU95QixNQUFNckIsT0FBTixDQUFjSixDQUFkLENBQVA7QUFDRCIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG4vL1xuY29uc3QgXyA9IHtcbiAgZ2V0LFxuICB0YWtlUmlnaHQsXG4gIGxhc3QsXG4gIG9yZGVyQnksXG4gIHJhbmdlLFxuICBjbG9uZSxcbiAgcmVtb3ZlXG59XG5cbmNvbnN0IGRlZmF1bHRCdXR0b24gPSAocHJvcHMpID0+IChcbiAgPGJ1dHRvbiB7Li4ucHJvcHN9IGNsYXNzTmFtZT0nLWJ0bic+e3Byb3BzLmNoaWxkcmVufTwvYnV0dG9uPlxuKVxuXG5leHBvcnQgY29uc3QgUmVhY3RUYWJsZURlZmF1bHRzID0ge1xuICAvLyBDbGFzc2VzXG4gIGNsYXNzTmFtZTogJy1zdHJpcGVkIC1oaWdobGlnaHQnLFxuICB0YWJsZUNsYXNzTmFtZTogJycsXG4gIHRoZWFkQ2xhc3NOYW1lOiAnJyxcbiAgdGJvZHlDbGFzc05hbWU6ICcnLFxuICB0ckNsYXNzTmFtZTogJycsXG4gIHBhZ2luYXRpb25DbGFzc05hbWU6ICcnLFxuICAvL1xuICBwYWdlU2l6ZTogMjAsXG4gIG1pblJvd3M6IDAsXG4gIC8vIEdsb2JhbCBDb2x1bW4gRGVmYXVsdHNcbiAgY29sdW1uOiB7XG4gICAgc29ydGFibGU6IHRydWUsXG4gICAgc2hvdzogdHJ1ZVxuICB9LFxuICAvLyBUZXh0XG4gIHByZXZpb3VzVGV4dDogJ1ByZXZpb3VzJyxcbiAgbmV4dFRleHQ6ICdOZXh0JyxcbiAgbG9hZGluZ1RleHQ6ICdMb2FkaW5nLi4uJyxcbiAgLy8gQ29tcG9uZW50c1xuICB0YWJsZUNvbXBvbmVudDogKHByb3BzKSA9PiA8dGFibGUgey4uLnByb3BzfT57cHJvcHMuY2hpbGRyZW59PC90YWJsZT4sXG4gIHRoZWFkQ29tcG9uZW50OiAocHJvcHMpID0+IDx0aGVhZCB7Li4ucHJvcHN9Pntwcm9wcy5jaGlsZHJlbn08L3RoZWFkPixcbiAgdGJvZHlDb21wb25lbnQ6IChwcm9wcykgPT4gPHRib2R5IHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvdGJvZHk+LFxuICB0ckNvbXBvbmVudDogKHByb3BzKSA9PiA8dHIgey4uLnByb3BzfT57cHJvcHMuY2hpbGRyZW59PC90cj4sXG4gIHRoQ29tcG9uZW50OiAocHJvcHMpID0+IDx0aCB7Li4ucHJvcHN9Pntwcm9wcy5jaGlsZHJlbn08L3RoPixcbiAgdGRDb21wb25lbnQ6IChwcm9wcykgPT4gPHRkIHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvdGQ+LFxuICBwcmV2aW91c0NvbXBvbmVudDogbnVsbCxcbiAgbmV4dENvbXBvbmVudDogbnVsbCxcbiAgLy8gVW5saXN0ZWRcbiAgZGF0YTogW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICBnZXREZWZhdWx0UHJvcHMgKCkge1xuICAgIHJldHVybiBSZWFjdFRhYmxlRGVmYXVsdHNcbiAgfSxcbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc29ydGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxNb3VudCAoKSB7XG4gICAgdGhpcy51cGRhdGUodGhpcy5wcm9wcylcbiAgfSxcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV4dFByb3BzKSB7XG4gICAgdGhpcy51cGRhdGUobmV4dFByb3BzKVxuICB9LFxuICB1cGRhdGUgKHByb3BzKSB7XG4gICAgY29uc3QgcmVzZXRTdGF0ZSA9IHtcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgcGFnZTogMCxcbiAgICAgIHBhZ2VzOiAtMVxuICAgICAgLy8gY29sdW1uczoge30gIGZvciBjb2x1bW4gaGlkaW5nIGluIHRoZSBmdXR1cmVcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShyZXNldFN0YXRlKVxuICAgIGNvbnN0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZSwgcmVzZXRTdGF0ZSlcbiAgICB0aGlzLmlzQXN5bmMgPSB0eXBlb2YgcHJvcHMuZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgIHRoaXMuYnVpbGRDb2x1bW5zKHByb3BzLCBuZXdTdGF0ZSlcbiAgICB0aGlzLmJ1aWxkRGF0YShwcm9wcywgbmV3U3RhdGUpXG4gIH0sXG4gIGJ1aWxkQ29sdW1ucyAocHJvcHMpIHtcbiAgICB0aGlzLmhhc0hlYWRlckdyb3VwcyA9IGZhbHNlXG4gICAgcHJvcHMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uLmNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5oYXNIZWFkZXJHcm91cHMgPSB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuaGVhZGVyR3JvdXBzID0gW11cbiAgICB0aGlzLmRlY29yYXRlZENvbHVtbnMgPSBbXVxuICAgIGxldCBjdXJyZW50U3BhbiA9IFtdXG5cbiAgICBjb25zdCBhZGRIZWFkZXIgPSAoY29sdW1ucywgY29sdW1uID0ge30pID0+IHtcbiAgICAgIHRoaXMuaGVhZGVyR3JvdXBzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgY29sdW1uLCB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnNcbiAgICAgIH0pKVxuICAgICAgY3VycmVudFNwYW4gPSBbXVxuICAgIH1cbiAgICBjb25zdCBtYWtlRGVjb3JhdGVkQ29sdW1uID0gKGNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZGNvbCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMuY29sdW1uLCBjb2x1bW4pXG4gICAgICBpZiAodHlwZW9mIGRjb2wuYWNjZXNzb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRjb2wuaWQgPSBkY29sLmlkIHx8IGRjb2wuYWNjZXNzb3JcbiAgICAgICAgY29uc3QgYWNjZXNzb3JTdHJpbmcgPSBkY29sLmFjY2Vzc29yXG4gICAgICAgIGRjb2wuYWNjZXNzb3IgPSByb3cgPT4gXy5nZXQocm93LCBhY2Nlc3NvclN0cmluZylcbiAgICAgIH1cbiAgICAgIGlmICghZGNvbC5pZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05vIGNvbHVtbiBJRCBmb3VuZCBmb3IgY29sdW1uOiAnLCBkY29sKVxuICAgICAgfVxuICAgICAgaWYgKCFkY29sLmFjY2Vzc29yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTm8gY29sdW1uIGFjY2Vzc29yIGZvdW5kIGZvciBjb2x1bW46ICcsIGRjb2wpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGNvbFxuICAgIH1cblxuICAgIHByb3BzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmNvbHVtbnMpIHtcbiAgICAgICAgY29sdW1uLmNvbHVtbnMuZm9yRWFjaChuZXN0ZWRDb2x1bW4gPT4ge1xuICAgICAgICAgIHRoaXMuZGVjb3JhdGVkQ29sdW1ucy5wdXNoKG1ha2VEZWNvcmF0ZWRDb2x1bW4obmVzdGVkQ29sdW1uKSlcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHRoaXMuaGFzSGVhZGVyR3JvdXBzKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTcGFuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFkZEhlYWRlcihjdXJyZW50U3BhbilcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkSGVhZGVyKF8udGFrZVJpZ2h0KHRoaXMuZGVjb3JhdGVkQ29sdW1ucywgY29sdW1uLmNvbHVtbnMubGVuZ3RoKSwgY29sdW1uKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlY29yYXRlZENvbHVtbnMucHVzaChtYWtlRGVjb3JhdGVkQ29sdW1uKGNvbHVtbikpXG4gICAgICAgIGN1cnJlbnRTcGFuLnB1c2goXy5sYXN0KHRoaXMuZGVjb3JhdGVkQ29sdW1ucykpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmICh0aGlzLmhhc0hlYWRlckdyb3VwcyAmJiBjdXJyZW50U3Bhbi5sZW5ndGggPiAwKSB7XG4gICAgICBhZGRIZWFkZXIoY3VycmVudFNwYW4pXG4gICAgfVxuICB9LFxuICBnZXRJbml0U29ydGluZyAoKSB7XG4gICAgY29uc3QgaW5pdFNvcnRpbmcgPSB0aGlzLmRlY29yYXRlZENvbHVtbnMuZmlsdGVyKGQgPT4ge1xuICAgICAgcmV0dXJuIHR5cGVvZiBkLnNvcnQgIT09ICd1bmRlZmluZWQnXG4gICAgfSkubWFwKGQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGQuaWQsXG4gICAgICAgIGFzYzogZC5zb3J0ID09PSAnYXNjJ1xuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gaW5pdFNvcnRpbmcubGVuZ3RoID8gaW5pdFNvcnRpbmcgOiBbe1xuICAgICAgaWQ6IHRoaXMuZGVjb3JhdGVkQ29sdW1uc1swXS5pZCxcbiAgICAgIGFzYzogdHJ1ZVxuICAgIH1dXG4gIH0sXG4gIGJ1aWxkRGF0YSAocHJvcHMsIHN0YXRlKSB7XG4gICAgY29uc3Qgc29ydGluZyA9IHN0YXRlLnNvcnRpbmcgPT09IGZhbHNlID8gdGhpcy5nZXRJbml0U29ydGluZygpIDogc3RhdGUuc29ydGluZ1xuXG4gICAgY29uc3Qgc2V0RGF0YSA9IChkYXRhKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc29ydGluZyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgcGFnZTogc3RhdGUucGFnZSxcbiAgICAgICAgbG9hZGluZzogZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNBc3luYykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxvYWRpbmc6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGNiID0gKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnVWggT2ghIE5vdGhpbmcgd2FzIHJldHVybmVkIGluIFJlYWN0VGFibGVcXCdzIGRhdGEgY2FsbGJhY2shJylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLnBhZ2VzKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBwYWdlczogcmVzLnBhZ2VzXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGFjY2VzcyB0aGUgZGF0YS4gU29ydGluZyBpcyBkb25lIHNlcnZlciBzaWRlLlxuICAgICAgICBjb25zdCBhY2Nlc3NlZERhdGEgPSB0aGlzLmFjY2Vzc0RhdGEocmVzLnJvd3MpXG4gICAgICAgIHNldERhdGEoYWNjZXNzZWREYXRhKVxuICAgICAgfVxuXG4gICAgICAvLyBGZXRjaCBkYXRhIHdpdGggY3VycmVudCBzdGF0ZVxuICAgICAgY29uc3QgZGF0YVJlcyA9IHByb3BzLmRhdGEoe1xuICAgICAgICBzb3J0aW5nLFxuICAgICAgICBwYWdlOiBzdGF0ZS5wYWdlIHx8IDAsXG4gICAgICAgIHBhZ2VTaXplOiBwcm9wcy5wYWdlU2l6ZSxcbiAgICAgICAgcGFnZXM6IHN0YXRlLnBhZ2VzXG4gICAgICB9LCBjYilcblxuICAgICAgaWYgKGRhdGFSZXMgJiYgZGF0YVJlcy50aGVuKSB7XG4gICAgICAgIGRhdGFSZXMudGhlbihjYilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV0dXJuIGxvY2FsbHkgYWNjZXNzZWQsIHNvcnRlZCBkYXRhXG4gICAgICBjb25zdCBhY2Nlc3NlZERhdGEgPSB0aGlzLmFjY2Vzc0RhdGEocHJvcHMuZGF0YSlcbiAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLnNvcnREYXRhKGFjY2Vzc2VkRGF0YSwgc29ydGluZylcbiAgICAgIHNldERhdGEoc29ydGVkRGF0YSlcbiAgICB9XG4gIH0sXG4gIGFjY2Vzc0RhdGEgKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKGQpID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IHtcbiAgICAgICAgX19vcmlnaW5hbDogZFxuICAgICAgfVxuICAgICAgdGhpcy5kZWNvcmF0ZWRDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgcm93W2NvbHVtbi5pZF0gPSBjb2x1bW4uYWNjZXNzb3IoZClcbiAgICAgIH0pXG4gICAgICByZXR1cm4gcm93XG4gICAgfSlcbiAgfSxcbiAgc29ydERhdGEgKGRhdGEsIHNvcnRpbmcpIHtcbiAgICBjb25zdCByZXNvbHZlZFNvcnRpbmcgPSBzb3J0aW5nLmxlbmd0aCA/IHNvcnRpbmcgOiB0aGlzLmdldEluaXRTb3J0aW5nKClcbiAgICByZXR1cm4gXy5vcmRlckJ5KGRhdGEsIHJlc29sdmVkU29ydGluZy5tYXAoc29ydCA9PiB7XG4gICAgICByZXR1cm4gcm93ID0+IHtcbiAgICAgICAgaWYgKHJvd1tzb3J0LmlkXSA9PT0gbnVsbCB8fCByb3dbc29ydC5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiAtSW5maW5pdHlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZW9mIHJvd1tzb3J0LmlkXSA9PT0gJ3N0cmluZycgPyByb3dbc29ydC5pZF0udG9Mb3dlckNhc2UoKSA6IHJvd1tzb3J0LmlkXVxuICAgICAgfVxuICAgIH0pLCByZXNvbHZlZFNvcnRpbmcubWFwKGQgPT4gZC5hc2MgPyAnYXNjJyA6ICdkZXNjJykpXG4gIH0sXG4gIHNldFBhZ2UgKHBhZ2UpIHtcbiAgICBpZiAodGhpcy5pc0FzeW5jKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZERhdGEodGhpcy5wcm9wcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZSwge3BhZ2V9KSlcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYWdlXG4gICAgfSlcbiAgfSxcblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnN0YXRlLmRhdGEgPyB0aGlzLnN0YXRlLmRhdGEgOiBbXVxuXG4gICAgY29uc3QgcGFnZXNMZW5ndGggPSB0aGlzLmlzQXN5bmMgPyB0aGlzLnN0YXRlLnBhZ2VzIDogTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gdGhpcy5wcm9wcy5wYWdlU2l6ZSlcbiAgICBjb25zdCBzdGFydFJvdyA9IHRoaXMucHJvcHMucGFnZVNpemUgKiB0aGlzLnN0YXRlLnBhZ2VcbiAgICBjb25zdCBlbmRSb3cgPSBzdGFydFJvdyArIHRoaXMucHJvcHMucGFnZVNpemVcbiAgICBjb25zdCBwYWdlUm93cyA9IHRoaXMuaXNBc3luYyA/IGRhdGEuc2xpY2UoMCwgdGhpcy5wcm9wcy5wYWdlU2l6ZSkgOiBkYXRhLnNsaWNlKHN0YXJ0Um93LCBlbmRSb3cpXG4gICAgY29uc3QgcGFkUm93cyA9IHBhZ2VzTGVuZ3RoID4gMSA/IF8ucmFuZ2UodGhpcy5wcm9wcy5wYWdlU2l6ZSAtIHBhZ2VSb3dzLmxlbmd0aClcbiAgICAgIDogdGhpcy5wcm9wcy5taW5Sb3dzID8gXy5yYW5nZShNYXRoLm1heCh0aGlzLnByb3BzLm1pblJvd3MgLSBwYWdlUm93cy5sZW5ndGgsIDApKVxuICAgICAgOiBbXVxuXG4gICAgY29uc3QgY2FuUHJldmlvdXMgPSB0aGlzLnN0YXRlLnBhZ2UgPiAwXG4gICAgY29uc3QgY2FuTmV4dCA9IHRoaXMuc3RhdGUucGFnZSArIDEgPCBwYWdlc0xlbmd0aFxuXG4gICAgY29uc3QgVGFibGVDb21wb25lbnQgPSB0aGlzLnByb3BzLnRhYmxlQ29tcG9uZW50XG4gICAgY29uc3QgVGhlYWRDb21wb25lbnQgPSB0aGlzLnByb3BzLnRoZWFkQ29tcG9uZW50XG4gICAgY29uc3QgVGJvZHlDb21wb25lbnQgPSB0aGlzLnByb3BzLnRib2R5Q29tcG9uZW50XG4gICAgY29uc3QgVHJDb21wb25lbnQgPSB0aGlzLnByb3BzLnRyQ29tcG9uZW50XG4gICAgY29uc3QgVGhDb21wb25lbnQgPSB0aGlzLnByb3BzLnRoQ29tcG9uZW50XG4gICAgY29uc3QgVGRDb21wb25lbnQgPSB0aGlzLnByb3BzLnRkQ29tcG9uZW50XG5cbiAgICBjb25zdCBQcmV2aW91c0NvbXBvbmVudCA9IHRoaXMucHJvcHMucHJldmlvdXNDb21wb25lbnQgfHwgZGVmYXVsdEJ1dHRvblxuICAgIGNvbnN0IE5leHRDb21wb25lbnQgPSB0aGlzLnByb3BzLm5leHRDb21wb25lbnQgfHwgZGVmYXVsdEJ1dHRvblxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHRoaXMucHJvcHMuY2xhc3NOYW1lLCAnUmVhY3RUYWJsZScpfT5cbiAgICAgICAgPFRhYmxlQ29tcG9uZW50IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0aGlzLnByb3BzLnRhYmxlQ2xhc3NOYW1lKX0+XG4gICAgICAgICAge3RoaXMuaGFzSGVhZGVyR3JvdXBzICYmIChcbiAgICAgICAgICAgIDxUaGVhZENvbXBvbmVudCBjbGFzc05hbWU9e2NsYXNzbmFtZXModGhpcy5wcm9wcy50aGVhZENsYXNzTmFtZSwgJy1oZWFkZXJHcm91cHMnKX0+XG4gICAgICAgICAgICAgIDxUckNvbXBvbmVudCBjbGFzc05hbWU9e3RoaXMucHJvcHMudHJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgIHt0aGlzLmhlYWRlckdyb3Vwcy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFRoQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhjb2x1bW4uY2xhc3NOYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuPXtjb2x1bW4uY29sdW1ucy5sZW5ndGh9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhjb2x1bW4uaW5uZXJDbGFzc05hbWUsICctdGgtaW5uZXInKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbicgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2x1bW4uaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17dGhpcy5wcm9wcy5kYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IGNvbHVtbi5oZWFkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvVGhDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgICAgICA8L1RoZWFkQ29tcG9uZW50PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFRoZWFkQ29tcG9uZW50IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0aGlzLnByb3BzLnRoZWFkQ2xhc3NOYW1lKX0+XG4gICAgICAgICAgICA8VHJDb21wb25lbnQgY2xhc3NOYW1lPXt0aGlzLnByb3BzLnRyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAge3RoaXMuZGVjb3JhdGVkQ29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnN0YXRlLnNvcnRpbmcuZmluZChkID0+IGQuaWQgPT09IGNvbHVtbi5pZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93ID0gdHlwZW9mIGNvbHVtbi5zaG93ID09PSAnZnVuY3Rpb24nID8gY29sdW1uLnNob3coKSA6IGNvbHVtbi5zaG93XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxUaENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHNvcnQgPyAoc29ydC5hc2MgPyAnLXNvcnQtYXNjJyA6ICctc29ydC1kZXNjJykgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnLWN1cnNvci1wb2ludGVyJzogY29sdW1uLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJy1oaWRkZW4nOiAhc2hvd1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc29ydGFibGUgJiYgdGhpcy5zb3J0Q29sdW1uKGNvbHVtbiwgZS5zaGlmdEtleSlcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY29sdW1uLmlubmVyQ2xhc3NOYW1lLCAnLXRoLWlubmVyJyl9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGggKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGNvbHVtbi5taW5XaWR0aCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbicgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29sdW1uLmhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXt0aGlzLnByb3BzLmRhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApIDogY29sdW1uLmhlYWRlcn1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RoQ29tcG9uZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1RyQ29tcG9uZW50PlxuICAgICAgICAgIDwvVGhlYWRDb21wb25lbnQ+XG4gICAgICAgICAgPFRib2R5Q29tcG9uZW50IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0aGlzLnByb3BzLnRib2R5Q2xhc3NOYW1lKX0+XG4gICAgICAgICAgICB7cGFnZVJvd3MubWFwKChyb3csIGkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VHJDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0aGlzLnByb3BzLnRyQ2xhc3NOYW1lKX1cbiAgICAgICAgICAgICAgICAgIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5kZWNvcmF0ZWRDb2x1bW5zLm1hcCgoY29sdW1uLCBpMikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDZWxsID0gY29sdW1uLnJlbmRlclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG93ID0gdHlwZW9mIGNvbHVtbi5zaG93ID09PSAnZnVuY3Rpb24nID8gY29sdW1uLnNob3coKSA6IGNvbHVtbi5zaG93XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPFRkQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY29sdW1uLmNsYXNzTmFtZSwge2hpZGRlbjogIXNob3d9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aTJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY29sdW1uLmlubmVyQ2xhc3NOYW1lLCAnLXRkLWlubmVyJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IGNvbHVtbi5taW5XaWR0aCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgQ2VsbCA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Jvd1tjb2x1bW4uaWRdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93PXtyb3cuX19vcmlnaW5hbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHR5cGVvZiBDZWxsICE9PSAndW5kZWZpbmVkJyA/IENlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvVGRDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAge3BhZFJvd3MubWFwKChyb3csIGkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VHJDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0aGlzLnByb3BzLnRyQ2xhc3NOYW1lLCAnLXBhZFJvdycpfVxuICAgICAgICAgICAgICAgICAga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLmRlY29yYXRlZENvbHVtbnMubWFwKChjb2x1bW4sIGkyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3cgPSB0eXBlb2YgY29sdW1uLnNob3cgPT09ICdmdW5jdGlvbicgPyBjb2x1bW4uc2hvdygpIDogY29sdW1uLnNob3dcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8VGRDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhjb2x1bW4uY2xhc3NOYW1lLCB7aGlkZGVuOiAhc2hvd30pfVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpMn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyhjb2x1bW4uaW5uZXJDbGFzc05hbWUsICctdGQtaW5uZXInKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogY29sdW1uLm1pbldpZHRoICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fT4mbmJzcDs8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RkQ29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L1RyQ29tcG9uZW50PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1Rib2R5Q29tcG9uZW50PlxuICAgICAgICA8L1RhYmxlQ29tcG9uZW50PlxuICAgICAgICB7cGFnZXNMZW5ndGggPiAxICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0aGlzLnByb3BzLnBhZ2luYXRpb25DbGFzc05hbWUsICctcGFnaW5hdGlvbicpfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSctbGVmdCc+XG4gICAgICAgICAgICAgIDxQcmV2aW91c0NvbXBvbmVudFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2NhblByZXZpb3VzICYmICgoZSkgPT4gdGhpcy5wcmV2aW91c1BhZ2UoZSkpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuUHJldmlvdXN9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnByZXZpb3VzVGV4dH1cbiAgICAgICAgICAgICAgPC9QcmV2aW91c0NvbXBvbmVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9Jy1jZW50ZXInPlxuICAgICAgICAgICAgICBQYWdlIHt0aGlzLnN0YXRlLnBhZ2UgKyAxfSBvZiB7cGFnZXNMZW5ndGh9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSctcmlnaHQnPlxuICAgICAgICAgICAgICA8TmV4dENvbXBvbmVudFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2Nhbk5leHQgJiYgKChlKSA9PiB0aGlzLm5leHRQYWdlKGUpKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhbk5leHR9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLm5leHRUZXh0fVxuICAgICAgICAgICAgICA8L05leHRDb21wb25lbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJy1sb2FkaW5nJywgeyctYWN0aXZlJzogdGhpcy5zdGF0ZS5sb2FkaW5nfSl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSctbG9hZGluZy1pbm5lcic+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5sb2FkaW5nVGV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH0sXG4gIHNvcnRDb2x1bW4gKGNvbHVtbiwgYWRkaXRpdmUpIHtcbiAgICBjb25zdCBleGlzdGluZ1NvcnRpbmcgPSB0aGlzLnN0YXRlLnNvcnRpbmcgfHwgW11cbiAgICBsZXQgc29ydGluZyA9IF8uY2xvbmUodGhpcy5zdGF0ZS5zb3J0aW5nIHx8IFtdKVxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBzb3J0aW5nLmZpbmRJbmRleChkID0+IGQuaWQgPT09IGNvbHVtbi5pZClcbiAgICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHNvcnRpbmdbZXhpc3RpbmdJbmRleF1cbiAgICAgIGlmIChleGlzdGluZy5hc2MpIHtcbiAgICAgICAgZXhpc3RpbmcuYXNjID0gZmFsc2VcbiAgICAgICAgaWYgKCFhZGRpdGl2ZSkge1xuICAgICAgICAgIHNvcnRpbmcgPSBbZXhpc3RpbmddXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhZGRpdGl2ZSkge1xuICAgICAgICAgIHNvcnRpbmcuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhpc3RpbmcuYXNjID0gdHJ1ZVxuICAgICAgICAgIHNvcnRpbmcgPSBbZXhpc3RpbmddXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFkZGl0aXZlKSB7XG4gICAgICAgIHNvcnRpbmcucHVzaCh7XG4gICAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgICBhc2M6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvcnRpbmcgPSBbe1xuICAgICAgICAgIGlkOiBjb2x1bW4uaWQsXG4gICAgICAgICAgYXNjOiB0cnVlXG4gICAgICAgIH1dXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhZ2UgPSAoZXhpc3RpbmdJbmRleCA9PT0gMCB8fCAoIWV4aXN0aW5nU29ydGluZy5sZW5ndGggJiYgc29ydGluZy5sZW5ndGgpIHx8ICFhZGRpdGl2ZSkgPyAwIDogdGhpcy5zdGF0ZS5wYWdlXG4gICAgdGhpcy5idWlsZERhdGEodGhpcy5wcm9wcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZSwge3BhZ2UsIHNvcnRpbmd9KSlcbiAgfSxcbiAgbmV4dFBhZ2UgKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnNldFBhZ2UodGhpcy5zdGF0ZS5wYWdlICsgMSlcbiAgfSxcbiAgcHJldmlvdXNQYWdlIChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5zZXRQYWdlKHRoaXMuc3RhdGUucGFnZSAtIDEpXG4gIH1cbn0pXG5cbi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gVXRpbHNcbi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG5mdW5jdGlvbiByZW1vdmUgKGEsIGIpIHtcbiAgcmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uIChvLCBpKSB7XG4gICAgdmFyIHIgPSBiKG8pXG4gICAgaWYgKHIpIHtcbiAgICAgIGEuc3BsaWNlKGksIDEpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0IChhLCBiKSB7XG4gIGlmIChpc0FycmF5KGIpKSB7XG4gICAgYiA9IGIuam9pbignLicpXG4gIH1cbiAgcmV0dXJuIGJcbiAgICAucmVwbGFjZSgnWycsICcuJykucmVwbGFjZSgnXScsICcnKVxuICAgIC5zcGxpdCgnLicpXG4gICAgLnJlZHVjZShcbiAgICAgIGZ1bmN0aW9uIChvYmosIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiBvYmpbcHJvcGVydHldXG4gICAgICB9LCBhXG4gICAgKVxufVxuXG5mdW5jdGlvbiB0YWtlUmlnaHQgKGFyciwgbikge1xuICBjb25zdCBzdGFydCA9IG4gPiBhcnIubGVuZ3RoID8gMCA6IGFyci5sZW5ndGggLSBuXG4gIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQpXG59XG5cbmZ1bmN0aW9uIGxhc3QgKGFycikge1xuICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXVxufVxuXG5mdW5jdGlvbiByYW5nZSAobikge1xuICBjb25zdCBhcnIgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGFyci5wdXNoKG4pXG4gIH1cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBvcmRlckJ5IChhcnIsIGZ1bmNzLCBkaXJzKSB7XG4gIHJldHVybiBhcnIuc29ydCgoYSwgYikgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbXAgPSBmdW5jc1tpXVxuICAgICAgY29uc3QgY2EgPSBjb21wKGEpXG4gICAgICBjb25zdCBjYiA9IGNvbXAoYilcbiAgICAgIGNvbnN0IGRlc2MgPSBkaXJzW2ldID09PSBmYWxzZSB8fCBkaXJzW2ldID09PSAnZGVzYydcbiAgICAgIGlmIChjYSA+IGNiKSB7XG4gICAgICAgIHJldHVybiBkZXNjID8gLTEgOiAxXG4gICAgICB9XG4gICAgICBpZiAoY2EgPCBjYikge1xuICAgICAgICByZXR1cm4gZGVzYyA/IDEgOiAtMVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMFxuICB9KVxufVxuXG5mdW5jdGlvbiBjbG9uZSAoYSkge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9KSlcbn1cblxuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBIZWxwZXJzXG4vLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcblxuZnVuY3Rpb24gaXNBcnJheSAoYSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhKVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJfIiwiZ2V0IiwidGFrZVJpZ2h0IiwibGFzdCIsIm9yZGVyQnkiLCJyYW5nZSIsImNsb25lIiwicmVtb3ZlIiwiZGVmYXVsdEJ1dHRvbiIsInByb3BzIiwiY2hpbGRyZW4iLCJSZWFjdFRhYmxlRGVmYXVsdHMiLCJjbGFzc05hbWUiLCJ0YWJsZUNsYXNzTmFtZSIsInRoZWFkQ2xhc3NOYW1lIiwidGJvZHlDbGFzc05hbWUiLCJ0ckNsYXNzTmFtZSIsInBhZ2luYXRpb25DbGFzc05hbWUiLCJwYWdlU2l6ZSIsIm1pblJvd3MiLCJjb2x1bW4iLCJzb3J0YWJsZSIsInNob3ciLCJwcmV2aW91c1RleHQiLCJuZXh0VGV4dCIsImxvYWRpbmdUZXh0IiwidGFibGVDb21wb25lbnQiLCJ0aGVhZENvbXBvbmVudCIsInRib2R5Q29tcG9uZW50IiwidHJDb21wb25lbnQiLCJ0aENvbXBvbmVudCIsInRkQ29tcG9uZW50IiwicHJldmlvdXNDb21wb25lbnQiLCJuZXh0Q29tcG9uZW50IiwiZGF0YSIsImNyZWF0ZUNsYXNzIiwiZ2V0RGVmYXVsdFByb3BzIiwiZ2V0SW5pdGlhbFN0YXRlIiwic29ydGluZyIsImNvbXBvbmVudFdpbGxNb3VudCIsInVwZGF0ZSIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJuZXh0UHJvcHMiLCJyZXNldFN0YXRlIiwibG9hZGluZyIsInBhZ2UiLCJwYWdlcyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzdGF0ZSIsImlzQXN5bmMiLCJidWlsZENvbHVtbnMiLCJidWlsZERhdGEiLCJoYXNIZWFkZXJHcm91cHMiLCJjb2x1bW5zIiwiZm9yRWFjaCIsImhlYWRlckdyb3VwcyIsImRlY29yYXRlZENvbHVtbnMiLCJjdXJyZW50U3BhbiIsImFkZEhlYWRlciIsInB1c2giLCJtYWtlRGVjb3JhdGVkQ29sdW1uIiwiZGNvbCIsImFjY2Vzc29yIiwiaWQiLCJhY2Nlc3NvclN0cmluZyIsInJvdyIsImNvbnNvbGUiLCJ3YXJuIiwiaSIsIm5lc3RlZENvbHVtbiIsImxlbmd0aCIsImdldEluaXRTb3J0aW5nIiwiaW5pdFNvcnRpbmciLCJmaWx0ZXIiLCJkIiwic29ydCIsIm1hcCIsImFzYyIsInNldERhdGEiLCJjYiIsInJlcyIsIlByb21pc2UiLCJyZWplY3QiLCJhY2Nlc3NlZERhdGEiLCJhY2Nlc3NEYXRhIiwicm93cyIsImRhdGFSZXMiLCJ0aGVuIiwic29ydGVkRGF0YSIsInNvcnREYXRhIiwiX19vcmlnaW5hbCIsIl9faW5kZXgiLCJyZXNvbHZlZFNvcnRpbmciLCJ1bmRlZmluZWQiLCJJbmZpbml0eSIsInRvTG93ZXJDYXNlIiwic2V0UGFnZSIsInJlbmRlciIsInBhZ2VzTGVuZ3RoIiwiTWF0aCIsImNlaWwiLCJzdGFydFJvdyIsImVuZFJvdyIsInBhZ2VSb3dzIiwic2xpY2UiLCJwYWRSb3dzIiwibWF4IiwiY2FuUHJldmlvdXMiLCJjYW5OZXh0IiwiVGFibGVDb21wb25lbnQiLCJUaGVhZENvbXBvbmVudCIsIlRib2R5Q29tcG9uZW50IiwiVHJDb21wb25lbnQiLCJUaENvbXBvbmVudCIsIlRkQ29tcG9uZW50IiwiUHJldmlvdXNDb21wb25lbnQiLCJOZXh0Q29tcG9uZW50IiwiaW5uZXJDbGFzc05hbWUiLCJoZWFkZXIiLCJmaW5kIiwiZSIsInNvcnRDb2x1bW4iLCJzaGlmdEtleSIsIndpZHRoIiwibWluV2lkdGgiLCJpMiIsIkNlbGwiLCJoaWRkZW4iLCJwcmV2aW91c1BhZ2UiLCJuZXh0UGFnZSIsImFkZGl0aXZlIiwiZXhpc3RpbmdTb3J0aW5nIiwiZXhpc3RpbmdJbmRleCIsImZpbmRJbmRleCIsImV4aXN0aW5nIiwic3BsaWNlIiwicHJldmVudERlZmF1bHQiLCJhIiwiYiIsIm8iLCJyIiwiaXNBcnJheSIsImpvaW4iLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJvYmoiLCJwcm9wZXJ0eSIsImFyciIsIm4iLCJzdGFydCIsImZ1bmNzIiwiZGlycyIsImNvbXAiLCJjYSIsImRlc2MiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJrZXkiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiQXJyYXkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7OztBQUNBO0FBQ0EsSUFBTUEsSUFBSTtBQUNSQyxVQURRO0FBRVJDLHNCQUZRO0FBR1JDLFlBSFE7QUFJUkMsa0JBSlE7QUFLUkMsY0FMUTtBQU1SQyxjQU5RO0FBT1JDO0FBUFEsQ0FBVjs7QUFVQSxJQUFNQyxnQkFBZ0IsU0FBaEJBLGFBQWdCLENBQUNDLEtBQUQ7QUFBQSxTQUNwQjtBQUFBO0FBQUEsaUJBQVlBLEtBQVosSUFBbUIsV0FBVSxNQUE3QjtBQUFxQ0EsVUFBTUM7QUFBM0MsR0FEb0I7QUFBQSxDQUF0Qjs7QUFJTyxJQUFNQyxrREFBcUI7QUFDaEM7QUFDQUMsYUFBVyxxQkFGcUI7QUFHaENDLGtCQUFnQixFQUhnQjtBQUloQ0Msa0JBQWdCLEVBSmdCO0FBS2hDQyxrQkFBZ0IsRUFMZ0I7QUFNaENDLGVBQWEsRUFObUI7QUFPaENDLHVCQUFxQixFQVBXO0FBUWhDO0FBQ0FDLFlBQVUsRUFUc0I7QUFVaENDLFdBQVMsQ0FWdUI7QUFXaEM7QUFDQUMsVUFBUTtBQUNOQyxjQUFVLElBREo7QUFFTkMsVUFBTTtBQUZBLEdBWndCO0FBZ0JoQztBQUNBQyxnQkFBYyxVQWpCa0I7QUFrQmhDQyxZQUFVLE1BbEJzQjtBQW1CaENDLGVBQWEsWUFuQm1CO0FBb0JoQztBQUNBQyxrQkFBZ0Isd0JBQUNqQixLQUFEO0FBQUEsV0FBVztBQUFBO0FBQVdBLFdBQVg7QUFBbUJBLFlBQU1DO0FBQXpCLEtBQVg7QUFBQSxHQXJCZ0I7QUFzQmhDaUIsa0JBQWdCLHdCQUFDbEIsS0FBRDtBQUFBLFdBQVc7QUFBQTtBQUFXQSxXQUFYO0FBQW1CQSxZQUFNQztBQUF6QixLQUFYO0FBQUEsR0F0QmdCO0FBdUJoQ2tCLGtCQUFnQix3QkFBQ25CLEtBQUQ7QUFBQSxXQUFXO0FBQUE7QUFBV0Es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QUFLM0UsRUFBVCxFQUFhO0FBQ1gsZUFBTzRFLE9BQU8sQ0FBQyxDQUFSLEdBQVksQ0FBbkI7QUFDRDtBQUNELFVBQUlELEtBQUszRSxFQUFULEVBQWE7QUFDWCxlQUFPNEUsT0FBTyxDQUFQLEdBQVcsQ0FBQyxDQUFuQjtBQUNEO0FBQ0Y7QUFDRCxXQUFPLENBQVA7QUFDRCxHQWRNLENBQVA7QUFlRDs7QUFFRCxTQUFTeEosS0FBVCxDQUFnQnNJLENBQWhCLEVBQW1CO0FBQ2pCLFNBQU9tQixLQUFLQyxLQUFMLENBQVdELEtBQUtFLFNBQUwsQ0FBZXJCLENBQWYsRUFBa0IsVUFBVXNCLEdBQVYsRUFBZUMsS0FBZixFQUFzQjtBQUN4RCxRQUFJLE9BQU9BLEtBQVAsS0FBaUIsVUFBckIsRUFBaUM7QUFDL0IsYUFBT0EsTUFBTUMsUUFBTixFQUFQO0FBQ0Q7QUFDRCxXQUFPRCxLQUFQO0FBQ0QsR0FMaUIsQ0FBWCxDQUFQO0FBTUQ7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLFNBQVNuQixPQUFULENBQWtCSixDQUFsQixFQUFxQjtBQUNuQixTQUFPeUIsTUFBTXJCLE9BQU4sQ0FBY0osQ0FBZCxDQUFQO0FBQ0QiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuLy9cbmNvbnN0IF8gPSB7XG4gIGdldCxcbiAgdGFrZVJpZ2h0LFxuICBsYXN0LFxuICBvcmRlckJ5LFxuICByYW5nZSxcbiAgY2xvbmUsXG4gIHJlbW92ZVxufVxuXG5jb25zdCBkZWZhdWx0QnV0dG9uID0gKHByb3BzKSA9PiAoXG4gIDxidXR0b24gey4uLnByb3BzfSBjbGFzc05hbWU9Jy1idG4nPntwcm9wcy5jaGlsZHJlbn08L2J1dHRvbj5cbilcblxuZXhwb3J0IGNvbnN0IFJlYWN0VGFibGVEZWZhdWx0cyA9IHtcbiAgLy8gQ2xhc3Nlc1xuICBjbGFzc05hbWU6ICctc3RyaXBlZCAtaGlnaGxpZ2h0JyxcbiAgdGFibGVDbGFzc05hbWU6ICcnLFxuICB0aGVhZENsYXNzTmFtZTogJycsXG4gIHRib2R5Q2xhc3NOYW1lOiAnJyxcbiAgdHJDbGFzc05hbWU6ICcnLFxuICBwYWdpbmF0aW9uQ2xhc3NOYW1lOiAnJyxcbiAgLy9cbiAgcGFnZVNpemU6IDIwLFxuICBtaW5Sb3dzOiAwLFxuICAvLyBHbG9iYWwgQ29sdW1uIERlZmF1bHRzXG4gIGNvbHVtbjoge1xuICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIHNob3c6IHRydWVcbiAgfSxcbiAgLy8gVGV4dFxuICBwcmV2aW91c1RleHQ6ICdQcmV2aW91cycsXG4gIG5leHRUZXh0OiAnTmV4dCcsXG4gIGxvYWRpbmdUZXh0OiAnTG9hZGluZy4uLicsXG4gIC8vIENvbXBvbmVudHNcbiAgdGFibGVDb21wb25lbnQ6IChwcm9wcykgPT4gPHRhYmxlIHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvdGFibGU+LFxuICB0aGVhZENvbXBvbmVudDogKHByb3BzKSA9PiA8dGhlYWQgey4uLnByb3BzfT57cHJvcHMuY2hpbGRyZW59PC90aGVhZD4sXG4gIHRib2R5Q29tcG9uZW50OiAocHJvcHMpID0+IDx0Ym9keSB7Li4ucHJvcHN9Pntwcm9wcy5jaGlsZHJlbn08L3Rib2R5PixcbiAgdHJDb21wb25lbnQ6IChwcm9wcykgPT4gPHRyIHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvdHI+LFxuICB0aENvbXBvbmVudDogKHByb3BzKSA9PiA8dGggey4uLnByb3BzfT57cHJvcHMuY2hpbGRyZW59PC90aD4sXG4gIHRkQ29tcG9uZW50OiAocHJvcHMpID0+IDx0ZCB7Li4ucHJvcHN9Pntwcm9wcy5jaGlsZHJlbn08L3RkPixcbiAgcHJldmlvdXNDb21wb25lbnQ6IG51bGwsXG4gIG5leHRDb21wb25lbnQ6IG51bGwsXG4gIC8vIFVubGlzdGVkXG4gIGRhdGE6IFtdXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgZ2V0RGVmYXVsdFByb3BzICgpIHtcbiAgICByZXR1cm4gUmVhY3RUYWJsZURlZmF1bHRzXG4gIH0sXG4gIGdldEluaXRpYWxTdGF0ZSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wb25lbnRXaWxsTW91bnQgKCkge1xuICAgIHRoaXMudXBkYXRlKHRoaXMucHJvcHMpXG4gIH0sXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcykge1xuICAgIHRoaXMudXBkYXRlKG5leHRQcm9wcylcbiAgfSxcbiAgdXBkYXRlIChwcm9wcykge1xuICAgIGNvbnN0IHJlc2V0U3RhdGUgPSB7XG4gICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIHBhZ2U6IDAsXG4gICAgICBwYWdlczogLTFcbiAgICAgIC8vIGNvbHVtbnM6IHt9ICBmb3IgY29sdW1uIGhpZGluZyBpbiB0aGUgZnV0dXJlXG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUocmVzZXRTdGF0ZSlcbiAgICBjb25zdCBuZXdTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUsIHJlc2V0U3RhdGUpXG4gICAgdGhpcy5pc0FzeW5jID0gdHlwZW9mIHByb3BzLmRhdGEgPT09ICdmdW5jdGlvbidcbiAgICB0aGlzLmJ1aWxkQ29sdW1ucyhwcm9wcywgbmV3U3RhdGUpXG4gICAgdGhpcy5idWlsZERhdGEocHJvcHMsIG5ld1N0YXRlKVxuICB9LFxuICBidWlsZENvbHVtbnMgKHByb3BzKSB7XG4gICAgdGhpcy5oYXNIZWFkZXJHcm91cHMgPSBmYWxzZVxuICAgIHByb3BzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuaGFzSGVhZGVyR3JvdXBzID0gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmhlYWRlckdyb3VwcyA9IFtdXG4gICAgdGhpcy5kZWNvcmF0ZWRDb2x1bW5zID0gW11cbiAgICBsZXQgY3VycmVudFNwYW4gPSBbXVxuXG4gICAgY29uc3QgYWRkSGVhZGVyID0gKGNvbHVtbnMsIGNvbHVtbiA9IHt9KSA9PiB7XG4gICAgICB0aGlzLmhlYWRlckdyb3Vwcy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGNvbHVtbiwge1xuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zXG4gICAgICB9KSlcbiAgICAgIGN1cnJlbnRTcGFuID0gW11cbiAgICB9XG4gICAgY29uc3QgbWFrZURlY29yYXRlZENvbHVtbiA9IChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGRjb2wgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzLmNvbHVtbiwgY29sdW1uKVxuICAgICAgaWYgKHR5cGVvZiBkY29sLmFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICBkY29sLmlkID0gZGNvbC5pZCB8fCBkY29sLmFjY2Vzc29yXG4gICAgICAgIGNvbnN0IGFjY2Vzc29yU3RyaW5nID0gZGNvbC5hY2Nlc3NvclxuICAgICAgICBkY29sLmFjY2Vzc29yID0gcm93ID0+IF8uZ2V0KHJvdywgYWNjZXNzb3JTdHJpbmcpXG4gICAgICB9XG4gICAgICBpZiAoIWRjb2wuaWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyBjb2x1bW4gSUQgZm91bmQgZm9yIGNvbHVtbjogJywgZGNvbClcbiAgICAgIH1cbiAgICAgIGlmICghZGNvbC5hY2Nlc3Nvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05vIGNvbHVtbiBhY2Nlc3NvciBmb3VuZCBmb3IgY29sdW1uOiAnLCBkY29sKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRjb2xcbiAgICB9XG5cbiAgICBwcm9wcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICAgIGNvbHVtbi5jb2x1bW5zLmZvckVhY2gobmVzdGVkQ29sdW1uID0+IHtcbiAgICAgICAgICB0aGlzLmRlY29yYXRlZENvbHVtbnMucHVzaChtYWtlRGVjb3JhdGVkQ29sdW1uKG5lc3RlZENvbHVtbikpXG4gICAgICAgIH0pXG4gICAgICAgIGlmICh0aGlzLmhhc0hlYWRlckdyb3Vwcykge1xuICAgICAgICAgIGlmIChjdXJyZW50U3Bhbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhZGRIZWFkZXIoY3VycmVudFNwYW4pXG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZEhlYWRlcihfLnRha2VSaWdodCh0aGlzLmRlY29yYXRlZENvbHVtbnMsIGNvbHVtbi5jb2x1bW5zLmxlbmd0aCksIGNvbHVtbilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0ZWRDb2x1bW5zLnB1c2gobWFrZURlY29yYXRlZENvbHVtbihjb2x1bW4pKVxuICAgICAgICBjdXJyZW50U3Bhbi5wdXNoKF8ubGFzdCh0aGlzLmRlY29yYXRlZENvbHVtbnMpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5oYXNIZWFkZXJHcm91cHMgJiYgY3VycmVudFNwYW4ubGVuZ3RoID4gMCkge1xuICAgICAgYWRkSGVhZGVyKGN1cnJlbnRTcGFuKVxuICAgIH1cbiAgfSxcbiAgZ2V0SW5pdFNvcnRpbmcgKCkge1xuICAgIGNvbnN0IGluaXRTb3J0aW5nID0gdGhpcy5kZWNvcmF0ZWRDb2x1bW5zLmZpbHRlcihkID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgZC5zb3J0ICE9PSAndW5kZWZpbmVkJ1xuICAgIH0pLm1hcChkID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBkLmlkLFxuICAgICAgICBhc2M6IGQuc29ydCA9PT0gJ2FzYydcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGluaXRTb3J0aW5nLmxlbmd0aCA/IGluaXRTb3J0aW5nIDogW3tcbiAgICAgIGlkOiB0aGlzLmRlY29yYXRlZENvbHVtbnNbMF0uaWQsXG4gICAgICBhc2M6IHRydWVcbiAgICB9XVxuICB9LFxuICBidWlsZERhdGEgKHByb3BzLCBzdGF0ZSkge1xuICAgIGNvbnN0IHNvcnRpbmcgPSBzdGF0ZS5zb3J0aW5nID09PSBmYWxzZSA/IHRoaXMuZ2V0SW5pdFNvcnRpbmcoKSA6IHN0YXRlLnNvcnRpbmdcblxuICAgIGNvbnN0IHNldERhdGEgPSAoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNvcnRpbmcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHBhZ2U6IHN0YXRlLnBhZ2UsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQXN5bmMpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsb2FkaW5nOiB0cnVlXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBjYiA9IChyZXMpID0+IHtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1VoIE9oISBOb3RoaW5nIHdhcyByZXR1cm5lZCBpbiBSZWFjdFRhYmxlXFwncyBkYXRhIGNhbGxiYWNrIScpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcy5wYWdlcykge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcGFnZXM6IHJlcy5wYWdlc1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gT25seSBhY2Nlc3MgdGhlIGRhdGEuIFNvcnRpbmcgaXMgZG9uZSBzZXJ2ZXIgc2lkZS5cbiAgICAgICAgY29uc3QgYWNjZXNzZWREYXRhID0gdGhpcy5hY2Nlc3NEYXRhKHJlcy5yb3dzKVxuICAgICAgICBzZXREYXRhKGFjY2Vzc2VkRGF0YSlcbiAgICAgIH1cblxuICAgICAgLy8gRmV0Y2ggZGF0YSB3aXRoIGN1cnJlbnQgc3RhdGVcbiAgICAgIGNvbnN0IGRhdGFSZXMgPSBwcm9wcy5kYXRhKHtcbiAgICAgICAgc29ydGluZyxcbiAgICAgICAgcGFnZTogc3RhdGUucGFnZSB8fCAwLFxuICAgICAgICBwYWdlU2l6ZTogcHJvcHMucGFnZVNpemUsXG4gICAgICAgIHBhZ2VzOiBzdGF0ZS5wYWdlc1xuICAgICAgfSwgY2IpXG5cbiAgICAgIGlmIChkYXRhUmVzICYmIGRhdGFSZXMudGhlbikge1xuICAgICAgICBkYXRhUmVzLnRoZW4oY2IpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldHVybiBsb2NhbGx5IGFjY2Vzc2VkLCBzb3J0ZWQgZGF0YVxuICAgICAgY29uc3QgYWNjZXNzZWREYXRhID0gdGhpcy5hY2Nlc3NEYXRhKHByb3BzLmRhdGEpXG4gICAgICBjb25zdCBzb3J0ZWREYXRhID0gdGhpcy5zb3J0RGF0YShhY2Nlc3NlZERhdGEsIHNvcnRpbmcpXG4gICAgICBzZXREYXRhKHNvcnRlZERhdGEpXG4gICAgfVxuICB9LFxuICBhY2Nlc3NEYXRhIChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChkLCBpKSA9PiB7XG4gICAgICBjb25zdCByb3cgPSB7XG4gICAgICAgIF9fb3JpZ2luYWw6IGQsXG4gICAgICAgIF9faW5kZXg6IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVjb3JhdGVkQ29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIHJvd1tjb2x1bW4uaWRdID0gY29sdW1uLmFjY2Vzc29yKGQpXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHJvd1xuICAgIH0pXG4gIH0sXG4gIHNvcnREYXRhIChkYXRhLCBzb3J0aW5nKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRTb3J0aW5nID0gc29ydGluZy5sZW5ndGggPyBzb3J0aW5nIDogdGhpcy5nZXRJbml0U29ydGluZygpXG4gICAgcmV0dXJuIF8ub3JkZXJCeShkYXRhLCByZXNvbHZlZFNvcnRpbmcubWFwKHNvcnQgPT4ge1xuICAgICAgcmV0dXJuIHJvdyA9PiB7XG4gICAgICAgIGlmIChyb3dbc29ydC5pZF0gPT09IG51bGwgfHwgcm93W3NvcnQuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gLUluZmluaXR5XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb3dbc29ydC5pZF0gPT09ICdzdHJpbmcnID8gcm93W3NvcnQuaWRdLnRvTG93ZXJDYXNlKCkgOiByb3dbc29ydC5pZF1cbiAgICAgIH1cbiAgICB9KSwgcmVzb2x2ZWRTb3J0aW5nLm1hcChkID0+IGQuYXNjID8gJ2FzYycgOiAnZGVzYycpKVxuICB9LFxuICBzZXRQYWdlIChwYWdlKSB7XG4gICAgaWYgKHRoaXMuaXNBc3luYykge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGREYXRhKHRoaXMucHJvcHMsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUsIHtwYWdlfSkpXG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcGFnZVxuICAgIH0pXG4gIH0sXG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zdGF0ZS5kYXRhID8gdGhpcy5zdGF0ZS5kYXRhIDogW11cblxuICAgIGNvbnN0IHBhZ2VzTGVuZ3RoID0gdGhpcy5pc0FzeW5jID8gdGhpcy5zdGF0ZS5wYWdlcyA6IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIHRoaXMucHJvcHMucGFnZVNpemUpXG4gICAgY29uc3Qgc3RhcnRSb3cgPSB0aGlzLnByb3BzLnBhZ2VTaXplICogdGhpcy5zdGF0ZS5wYWdlXG4gICAgY29uc3QgZW5kUm93ID0gc3RhcnRSb3cgKyB0aGlzLnByb3BzLnBhZ2VTaXplXG4gICAgY29uc3QgcGFnZVJvd3MgPSB0aGlzLmlzQXN5bmMgPyBkYXRhLnNsaWNlKDAsIHRoaXMucHJvcHMucGFnZVNpemUpIDogZGF0YS5zbGljZShzdGFydFJvdywgZW5kUm93KVxuICAgIGNvbnN0IHBhZFJvd3MgPSBwYWdlc0xlbmd0aCA+IDEgPyBfLnJhbmdlKHRoaXMucHJvcHMucGFnZVNpemUgLSBwYWdlUm93cy5sZW5ndGgpXG4gICAgICA6IHRoaXMucHJvcHMubWluUm93cyA/IF8ucmFuZ2UoTWF0aC5tYXgodGhpcy5wcm9wcy5taW5Sb3dzIC0gcGFnZVJvd3MubGVuZ3RoLCAwKSlcbiAgICAgIDogW11cblxuICAgIGNvbnN0IGNhblByZXZpb3VzID0gdGhpcy5zdGF0ZS5wYWdlID4gMFxuICAgIGNvbnN0IGNhbk5leHQgPSB0aGlzLnN0YXRlLnBhZ2UgKyAxIDwgcGFnZXNMZW5ndGhcblxuICAgIGNvbnN0IFRhYmxlQ29tcG9uZW50ID0gdGhpcy5wcm9wcy50YWJsZUNvbXBvbmVudFxuICAgIGNvbnN0IFRoZWFkQ29tcG9uZW50ID0gdGhpcy5wcm9wcy50aGVhZENvbXBvbmVudFxuICAgIGNvbnN0IFRib2R5Q29tcG9uZW50ID0gdGhpcy5wcm9wcy50Ym9keUNvbXBvbmVudFxuICAgIGNvbnN0IFRyQ29tcG9uZW50ID0gdGhpcy5wcm9wcy50ckNvbXBvbmVudFxuICAgIGNvbnN0IFRoQ29tcG9uZW50ID0gdGhpcy5wcm9wcy50aENvbXBvbmVudFxuICAgIGNvbnN0IFRkQ29tcG9uZW50ID0gdGhpcy5wcm9wcy50ZENvbXBvbmVudFxuXG4gICAgY29uc3QgUHJldmlvdXNDb21wb25lbnQgPSB0aGlzLnByb3BzLnByZXZpb3VzQ29tcG9uZW50IHx8IGRlZmF1bHRCdXR0b25cbiAgICBjb25zdCBOZXh0Q29tcG9uZW50ID0gdGhpcy5wcm9wcy5uZXh0Q29tcG9uZW50IHx8IGRlZmF1bHRCdXR0b25cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh0aGlzLnByb3BzLmNsYXNzTmFtZSwgJ1JlYWN0VGFibGUnKX0+XG4gICAgICAgIDxUYWJsZUNvbXBvbmVudCBjbGFzc05hbWU9e2NsYXNzbmFtZXModGhpcy5wcm9wcy50YWJsZUNsYXNzTmFtZSl9PlxuICAgICAgICAgIHt0aGlzLmhhc0hlYWRlckdyb3VwcyAmJiAoXG4gICAgICAgICAgICA8VGhlYWRDb21wb25lbnQgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHRoaXMucHJvcHMudGhlYWRDbGFzc05hbWUsICctaGVhZGVyR3JvdXBzJyl9PlxuICAgICAgICAgICAgICA8VHJDb21wb25lbnQgY2xhc3NOYW1lPXt0aGlzLnByb3BzLnRyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5oZWFkZXJHcm91cHMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxUaENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY29sdW1uLmNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY29sU3Bhbj17Y29sdW1uLmNvbHVtbnMubGVuZ3RofT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoY29sdW1uLmlubmVyQ2xhc3NOYW1lLCAnLXRoLWlubmVyJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sdW1uLmhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e3RoaXMucHJvcHMuZGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBjb2x1bW4uaGVhZGVyfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L1RoQ29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L1RyQ29tcG9uZW50PlxuICAgICAgICAgICAgPC9UaGVhZENvbXBvbmVudD5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxUaGVhZENvbXBvbmVudCBjbGFzc05hbWU9e2NsYXNzbmFtZXModGhpcy5wcm9wcy50aGVhZENsYXNzTmFtZSl9PlxuICAgICAgICAgICAgPFRyQ29tcG9uZW50IGNsYXNzTmFtZT17dGhpcy5wcm9wcy50ckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgIHt0aGlzLmRlY29yYXRlZENvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5zdGF0ZS5zb3J0aW5nLmZpbmQoZCA9PiBkLmlkID09PSBjb2x1bW4uaWQpXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdyA9IHR5cGVvZiBjb2x1bW4uc2hvdyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbHVtbi5zaG93KCkgOiBjb2x1bW4uc2hvd1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8VGhDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBzb3J0ID8gKHNvcnQuYXNjID8gJy1zb3J0LWFzYycgOiAnLXNvcnQtZGVzYycpIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJy1jdXJzb3ItcG9pbnRlcic6IGNvbHVtbi5zb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICctaGlkZGVuJzogIXNob3dcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNvcnRhYmxlICYmIHRoaXMuc29ydENvbHVtbihjb2x1bW4sIGUuc2hpZnRLZXkpXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNvbHVtbi5pbm5lckNsYXNzTmFtZSwgJy10aC1pbm5lcicpfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBjb2x1bW4ubWluV2lkdGggKyAncHgnXG4gICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiBjb2x1bW4uaGVhZGVyID09PSAnZnVuY3Rpb24nID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17dGhpcy5wcm9wcy5kYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IGNvbHVtbi5oZWFkZXJ9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9UaENvbXBvbmVudD5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9UckNvbXBvbmVudD5cbiAgICAgICAgICA8L1RoZWFkQ29tcG9uZW50PlxuICAgICAgICAgIDxUYm9keUNvbXBvbmVudCBjbGFzc05hbWU9e2NsYXNzbmFtZXModGhpcy5wcm9wcy50Ym9keUNsYXNzTmFtZSl9PlxuICAgICAgICAgICAge3BhZ2VSb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRyQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXModGhpcy5wcm9wcy50ckNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgICAgICBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAge3RoaXMuZGVjb3JhdGVkQ29sdW1ucy5tYXAoKGNvbHVtbiwgaTIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2VsbCA9IGNvbHVtbi5yZW5kZXJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdyA9IHR5cGVvZiBjb2x1bW4uc2hvdyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbHVtbi5zaG93KCkgOiBjb2x1bW4uc2hvd1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUZENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNvbHVtbi5jbGFzc05hbWUsIHtoaWRkZW46ICFzaG93fSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2kyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNvbHVtbi5pbm5lckNsYXNzTmFtZSwgJy10ZC1pbm5lcicpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGggKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBjb2x1bW4ubWluV2lkdGggKyAncHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIENlbGwgPT09ICdmdW5jdGlvbicgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtyb3dbY29sdW1uLmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdz17cm93Ll9fb3JpZ2luYWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17cm93Ll9faW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogdHlwZW9mIENlbGwgIT09ICd1bmRlZmluZWQnID8gQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uaWRdfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZENvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9UckNvbXBvbmVudD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICB7cGFkUm93cy5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUckNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHRoaXMucHJvcHMudHJDbGFzc05hbWUsICctcGFkUm93Jyl9XG4gICAgICAgICAgICAgICAgICBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAge3RoaXMuZGVjb3JhdGVkQ29sdW1ucy5tYXAoKGNvbHVtbiwgaTIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdyA9IHR5cGVvZiBjb2x1bW4uc2hvdyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbHVtbi5zaG93KCkgOiBjb2x1bW4uc2hvd1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUZENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNvbHVtbi5jbGFzc05hbWUsIHtoaWRkZW46ICFzaG93fSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2kyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKGNvbHVtbi5pbm5lckNsYXNzTmFtZSwgJy10ZC1pbm5lcicpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGggKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBjb2x1bW4ubWluV2lkdGggKyAncHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvVGRDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvVHJDb21wb25lbnQ+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVGJvZHlDb21wb25lbnQ+XG4gICAgICAgIDwvVGFibGVDb21wb25lbnQ+XG4gICAgICAgIHtwYWdlc0xlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHRoaXMucHJvcHMucGFnaW5hdGlvbkNsYXNzTmFtZSwgJy1wYWdpbmF0aW9uJyl9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9Jy1sZWZ0Jz5cbiAgICAgICAgICAgICAgPFByZXZpb3VzQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgb25DbGljaz17Y2FuUHJldmlvdXMgJiYgKChlKSA9PiB0aGlzLnByZXZpb3VzUGFnZShlKSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5QcmV2aW91c30+XG4gICAgICAgICAgICAgICAge3RoaXMucHJvcHMucHJldmlvdXNUZXh0fVxuICAgICAgICAgICAgICA8L1ByZXZpb3VzQ29tcG9uZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nLWNlbnRlcic+XG4gICAgICAgICAgICAgIFBhZ2Uge3RoaXMuc3RhdGUucGFnZSArIDF9IG9mIHtwYWdlc0xlbmd0aH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9Jy1yaWdodCc+XG4gICAgICAgICAgICAgIDxOZXh0Q29tcG9uZW50XG4gICAgICAgICAgICAgICAgb25DbGljaz17Y2FuTmV4dCAmJiAoKGUpID0+IHRoaXMubmV4dFBhZ2UoZSkpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuTmV4dH0+XG4gICAgICAgICAgICAgICAge3RoaXMucHJvcHMubmV4dFRleHR9XG4gICAgICAgICAgICAgIDwvTmV4dENvbXBvbmVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnLWxvYWRpbmcnLCB7Jy1hY3RpdmUnOiB0aGlzLnN0YXRlLmxvYWRpbmd9KX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9Jy1sb2FkaW5nLWlubmVyJz5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmxvYWRpbmdUZXh0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfSxcbiAgc29ydENvbHVtbiAoY29sdW1uLCBhZGRpdGl2ZSkge1xuICAgIGNvbnN0IGV4aXN0aW5nU29ydGluZyA9IHRoaXMuc3RhdGUuc29ydGluZyB8fCBbXVxuICAgIGxldCBzb3J0aW5nID0gXy5jbG9uZSh0aGlzLnN0YXRlLnNvcnRpbmcgfHwgW10pXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHNvcnRpbmcuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gY29sdW1uLmlkKVxuICAgIGlmIChleGlzdGluZ0luZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gc29ydGluZ1tleGlzdGluZ0luZGV4XVxuICAgICAgaWYgKGV4aXN0aW5nLmFzYykge1xuICAgICAgICBleGlzdGluZy5hc2MgPSBmYWxzZVxuICAgICAgICBpZiAoIWFkZGl0aXZlKSB7XG4gICAgICAgICAgc29ydGluZyA9IFtleGlzdGluZ11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFkZGl0aXZlKSB7XG4gICAgICAgICAgc29ydGluZy5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleGlzdGluZy5hc2MgPSB0cnVlXG4gICAgICAgICAgc29ydGluZyA9IFtleGlzdGluZ11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYWRkaXRpdmUpIHtcbiAgICAgICAgc29ydGluZy5wdXNoKHtcbiAgICAgICAgICBpZDogY29sdW1uLmlkLFxuICAgICAgICAgIGFzYzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ydGluZyA9IFt7XG4gICAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgICBhc2M6IHRydWVcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcGFnZSA9IChleGlzdGluZ0luZGV4ID09PSAwIHx8ICghZXhpc3RpbmdTb3J0aW5nLmxlbmd0aCAmJiBzb3J0aW5nLmxlbmd0aCkgfHwgIWFkZGl0aXZlKSA/IDAgOiB0aGlzLnN0YXRlLnBhZ2VcbiAgICB0aGlzLmJ1aWxkRGF0YSh0aGlzLnByb3BzLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlLCB7cGFnZSwgc29ydGluZ30pKVxuICB9LFxuICBuZXh0UGFnZSAoZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIHRoaXMuc2V0UGFnZSh0aGlzLnN0YXRlLnBhZ2UgKyAxKVxuICB9LFxuICBwcmV2aW91c1BhZ2UgKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnNldFBhZ2UodGhpcy5zdGF0ZS5wYWdlIC0gMSlcbiAgfVxufSlcblxuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBVdGlsc1xuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbmZ1bmN0aW9uIHJlbW92ZSAoYSwgYikge1xuICByZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24gKG8sIGkpIHtcbiAgICB2YXIgciA9IGIobylcbiAgICBpZiAocikge1xuICAgICAgYS5zcGxpY2UoaSwgMSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXQgKGEsIGIpIHtcbiAgaWYgKGlzQXJyYXkoYikpIHtcbiAgICBiID0gYi5qb2luKCcuJylcbiAgfVxuICByZXR1cm4gYlxuICAgIC5yZXBsYWNlKCdbJywgJy4nKS5yZXBsYWNlKCddJywgJycpXG4gICAgLnNwbGl0KCcuJylcbiAgICAucmVkdWNlKFxuICAgICAgZnVuY3Rpb24gKG9iaiwgcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wZXJ0eV1cbiAgICAgIH0sIGFcbiAgICApXG59XG5cbmZ1bmN0aW9uIHRha2VSaWdodCAoYXJyLCBuKSB7XG4gIGNvbnN0IHN0YXJ0ID0gbiA+IGFyci5sZW5ndGggPyAwIDogYXJyLmxlbmd0aCAtIG5cbiAgcmV0dXJuIGFyci5zbGljZShzdGFydClcbn1cblxuZnVuY3Rpb24gbGFzdCAoYXJyKSB7XG4gIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdXG59XG5cbmZ1bmN0aW9uIHJhbmdlIChuKSB7XG4gIGNvbnN0IGFyciA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgYXJyLnB1c2gobilcbiAgfVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIG9yZGVyQnkgKGFyciwgZnVuY3MsIGRpcnMpIHtcbiAgcmV0dXJuIGFyci5zb3J0KChhLCBiKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29tcCA9IGZ1bmNzW2ldXG4gICAgICBjb25zdCBjYSA9IGNvbXAoYSlcbiAgICAgIGNvbnN0IGNiID0gY29tcChiKVxuICAgICAgY29uc3QgZGVzYyA9IGRpcnNbaV0gPT09IGZhbHNlIHx8IGRpcnNbaV0gPT09ICdkZXNjJ1xuICAgICAgaWYgKGNhID4gY2IpIHtcbiAgICAgICAgcmV0dXJuIGRlc2MgPyAtMSA6IDFcbiAgICAgIH1cbiAgICAgIGlmIChjYSA8IGNiKSB7XG4gICAgICAgIHJldHVybiBkZXNjID8gMSA6IC0xXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNsb25lIChhKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pKVxufVxuXG4vLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIEhlbHBlcnNcbi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG5mdW5jdGlvbiBpc0FycmF5IChhKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGEpXG59XG4iXX0= \ No newline at end of file diff --git a/react-table.js b/react-table.js index 7801a22..6027763 100644 --- a/react-table.js +++ b/react-table.js @@ -1,5 +1,5 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.reactTable = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;oe.length?0:e.length-t;return e.slice(a)}function last(e){return e[e.length-1]}function range(e){for(var t=[],a=0;ao)return c?-1:1;if(i1&&void 0!==arguments[1]?arguments[1]:{};t.headerGroups.push(Object.assign({},s,{columns:e})),a=[]},n=function(e){var a=Object.assign({},t.props.column,e);return"string"==typeof a.accessor&&!function(){a.id=a.id||a.accessor;var e=a.accessor;a.accessor=function(t){return _.get(t,e)}}(),a.id||console.warn("No column ID found for column: ",a),a.accessor||console.warn("No column accessor found for column: ",a),a};e.columns.forEach(function(e,r){e.columns?(e.columns.forEach(function(e){t.decoratedColumns.push(n(e))}),t.hasHeaderGroups&&(a.length>0&&s(a),s(_.takeRight(t.decoratedColumns,e.columns.length),e))):(t.decoratedColumns.push(n(e)),a.push(_.last(t.decoratedColumns)))}),this.hasHeaderGroups&&a.length>0&&s(a)},getInitSorting:function(){var e=this.decoratedColumns.filter(function(e){return"undefined"!=typeof e.sort}).map(function(e){return{id:e.id,asc:"asc"===e.sort}});return e.length?e:[{id:this.decoratedColumns[0].id,asc:!0}]},buildData:function(e,t){var a=this,s=t.sorting===!1?this.getInitSorting():t.sorting,n=function(e){a.setState({sorting:s,data:e,page:t.page,loading:!1})};if(this.isAsync){this.setState({loading:!0});var r=function(e){if(!e)return Promise.reject("Uh Oh! Nothing was returned in ReactTable's data callback!");e.pages&&a.setState({pages:e.pages});var t=a.accessData(e.rows);n(t)},i=e.data({sorting:s,page:t.page||0,pageSize:e.pageSize,pages:t.pages},r);i&&i.then&&i.then(r)}else{var o=this.accessData(e.data),c=this.sortData(o,s);n(c)}},accessData:function(e){var t=this;return e.map(function(e){var a={__original:e};return t.decoratedColumns.forEach(function(t){a[t.id]=t.accessor(e)}),a})},sortData:function(e,t){var a=t.length?t:this.getInitSorting();return _.orderBy(e,a.map(function(e){return function(t){return null===t[e.id]||void 0===t[e.id]?-(1/0):"string"==typeof t[e.id]?t[e.id].toLowerCase():t[e.id]}}),a.map(function(e){return e.asc?"asc":"desc"}))},setPage:function(e){return this.isAsync?this.buildData(this.props,Object.assign({},this.state,{page:e})):void this.setState({page:e})},render:function(){var e=this,t=this.state.data?this.state.data:[],a=this.isAsync?this.state.pages:Math.ceil(t.length/this.props.pageSize),s=this.props.pageSize*this.state.page,n=s+this.props.pageSize,r=this.isAsync?t.slice(0,this.props.pageSize):t.slice(s,n),i=a>1?_.range(this.props.pageSize-r.length):this.props.minRows?_.range(Math.max(this.props.minRows-r.length,0)):[],o=this.state.page>0,c=this.state.page+11&&_react2.default.createElement("div",{className:(0,_classnames2.default)(this.props.paginationClassName,"-pagination")},_react2.default.createElement("div",{className:"-left"},_react2.default.createElement(m,{onClick:o&&function(t){return e.previousPage(t)},disabled:!o},this.props.previousText)),_react2.default.createElement("div",{className:"-center"},"Page ",this.state.page+1," of ",a),_react2.default.createElement("div",{className:"-right"},_react2.default.createElement(g,{onClick:c&&function(t){return e.nextPage(t)},disabled:!c},this.props.nextText))),_react2.default.createElement("div",{className:(0,_classnames2.default)("-loading",{"-active":this.state.loading})},_react2.default.createElement("div",{className:"-loading-inner"},this.props.loadingText)))},sortColumn:function(e,t){var a=this.state.sorting||[],s=_.clone(this.state.sorting||[]),n=s.findIndex(function(t){return t.id===e.id});if(n>-1){var r=s[n];r.asc?(r.asc=!1,t||(s=[r])):t?s.splice(n,1):(r.asc=!0,s=[r])}else t?s.push({id:e.id,asc:!0}):s=[{id:e.id,asc:!0}];var i=0===n||!a.length&&s.length||!t?0:this.state.page;this.buildData(this.props,Object.assign({},this.state,{page:i,sorting:s}))},nextPage:function(e){e.preventDefault(),this.setPage(this.state.page+1)},previousPage:function(e){e.preventDefault(),this.setPage(this.state.page-1)}}); +"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function remove(e,t){return e.filter(function(a,s){var n=t(a);return!!n&&(e.splice(s,1),!0)})}function get(e,t){return isArray(t)&&(t=t.join(".")),t.replace("[",".").replace("]","").split(".").reduce(function(e,t){return e[t]},e)}function takeRight(e,t){var a=t>e.length?0:e.length-t;return e.slice(a)}function last(e){return e[e.length-1]}function range(e){for(var t=[],a=0;ao)return c?-1:1;if(i1&&void 0!==arguments[1]?arguments[1]:{};t.headerGroups.push(Object.assign({},s,{columns:e})),a=[]},n=function(e){var a=Object.assign({},t.props.column,e);return"string"==typeof a.accessor&&!function(){a.id=a.id||a.accessor;var e=a.accessor;a.accessor=function(t){return _.get(t,e)}}(),a.id||console.warn("No column ID found for column: ",a),a.accessor||console.warn("No column accessor found for column: ",a),a};e.columns.forEach(function(e,r){e.columns?(e.columns.forEach(function(e){t.decoratedColumns.push(n(e))}),t.hasHeaderGroups&&(a.length>0&&s(a),s(_.takeRight(t.decoratedColumns,e.columns.length),e))):(t.decoratedColumns.push(n(e)),a.push(_.last(t.decoratedColumns)))}),this.hasHeaderGroups&&a.length>0&&s(a)},getInitSorting:function(){var e=this.decoratedColumns.filter(function(e){return"undefined"!=typeof e.sort}).map(function(e){return{id:e.id,asc:"asc"===e.sort}});return e.length?e:[{id:this.decoratedColumns[0].id,asc:!0}]},buildData:function(e,t){var a=this,s=t.sorting===!1?this.getInitSorting():t.sorting,n=function(e){a.setState({sorting:s,data:e,page:t.page,loading:!1})};if(this.isAsync){this.setState({loading:!0});var r=function(e){if(!e)return Promise.reject("Uh Oh! Nothing was returned in ReactTable's data callback!");e.pages&&a.setState({pages:e.pages});var t=a.accessData(e.rows);n(t)},i=e.data({sorting:s,page:t.page||0,pageSize:e.pageSize,pages:t.pages},r);i&&i.then&&i.then(r)}else{var o=this.accessData(e.data),c=this.sortData(o,s);n(c)}},accessData:function(e){var t=this;return e.map(function(e,a){var s={__original:e,__index:a};return t.decoratedColumns.forEach(function(t){s[t.id]=t.accessor(e)}),s})},sortData:function(e,t){var a=t.length?t:this.getInitSorting();return _.orderBy(e,a.map(function(e){return function(t){return null===t[e.id]||void 0===t[e.id]?-(1/0):"string"==typeof t[e.id]?t[e.id].toLowerCase():t[e.id]}}),a.map(function(e){return e.asc?"asc":"desc"}))},setPage:function(e){return this.isAsync?this.buildData(this.props,Object.assign({},this.state,{page:e})):void this.setState({page:e})},render:function(){var e=this,t=this.state.data?this.state.data:[],a=this.isAsync?this.state.pages:Math.ceil(t.length/this.props.pageSize),s=this.props.pageSize*this.state.page,n=s+this.props.pageSize,r=this.isAsync?t.slice(0,this.props.pageSize):t.slice(s,n),i=a>1?_.range(this.props.pageSize-r.length):this.props.minRows?_.range(Math.max(this.props.minRows-r.length,0)):[],o=this.state.page>0,c=this.state.page+11&&_react2.default.createElement("div",{className:(0,_classnames2.default)(this.props.paginationClassName,"-pagination")},_react2.default.createElement("div",{className:"-left"},_react2.default.createElement(m,{onClick:o&&function(t){return e.previousPage(t)},disabled:!o},this.props.previousText)),_react2.default.createElement("div",{className:"-center"},"Page ",this.state.page+1," of ",a),_react2.default.createElement("div",{className:"-right"},_react2.default.createElement(g,{onClick:c&&function(t){return e.nextPage(t)},disabled:!c},this.props.nextText))),_react2.default.createElement("div",{className:(0,_classnames2.default)("-loading",{"-active":this.state.loading})},_react2.default.createElement("div",{className:"-loading-inner"},this.props.loadingText)))},sortColumn:function(e,t){var a=this.state.sorting||[],s=_.clone(this.state.sorting||[]),n=s.findIndex(function(t){return t.id===e.id});if(n>-1){var r=s[n];r.asc?(r.asc=!1,t||(s=[r])):t?s.splice(n,1):(r.asc=!0,s=[r])}else t?s.push({id:e.id,asc:!0}):s=[{id:e.id,asc:!0}];var i=0===n||!a.length&&s.length||!t?0:this.state.page;this.buildData(this.props,Object.assign({},this.state,{page:i,sorting:s}))},nextPage:function(e){e.preventDefault(),this.setPage(this.state.page+1)},previousPage:function(e){e.preventDefault(),this.setPage(this.state.page-1)}}); },{"classnames":2,"react":"react"}],2:[function(require,module,exports){ !function(){"use strict";function e(){for(var r=[],o=0;o { + return data.map((d, i) => { const row = { - __original: d + __original: d, + __index: i } this.decoratedColumns.forEach(column => { row[column.id] = column.accessor(d) @@ -337,7 +338,8 @@ export default React.createClass({ ) : typeof Cell !== 'undefined' ? Cell : row[column.id]}