UNPKG

@lnormanha/react-native-web-video

Version:

A <Video /> element for react-native-web inspired in react-native-video

277 lines (224 loc) 24.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.Video = void 0; var _react = _interopRequireWildcard(require("react")); var _openFullscreen = require("./utils/open-fullscreen"); var _closeFullscreen = require("./utils/close-fullscreen"); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 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 Video = /*#__PURE__*/ function (_Component) { _inherits(Video, _Component); function Video() { var _getPrototypeOf2; var _this; _classCallCheck(this, Video); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Video)).call.apply(_getPrototypeOf2, [this].concat(args))); _defineProperty(_assertThisInitialized(_this), "_root", (0, _react.createRef)()); _defineProperty(_assertThisInitialized(_this), "setNativeProps", function () {}); _defineProperty(_assertThisInitialized(_this), "seek", function (time, _) { var element = _this._root.current; if (element) { element.currentTime = time; } }); _defineProperty(_assertThisInitialized(_this), "save", function () { console.log("Saving in local.."); return Promise.resolve(); }); _defineProperty(_assertThisInitialized(_this), "presentFullscreenPlayer", function () { var element = _this._root.current; if (element) { (0, _openFullscreen.openFullscreen)(element); } }); _defineProperty(_assertThisInitialized(_this), "dismissFullscreenPlayer", function () { (0, _closeFullscreen.closeFullscreen)(); }); _defineProperty(_assertThisInitialized(_this), "_onProgress", function () { var element = _this._root.current; if (_this.props.onProgress && element) { _this.props.onProgress({ currentTime: element.currentTime, // @todo add support for these values playableDuration: 0, seekableDuration: 0 }); } }); _defineProperty(_assertThisInitialized(_this), "_onLoadStart", function () { if (_this.props.onLoadStart) { _this.props.onLoadStart(); } }); _defineProperty(_assertThisInitialized(_this), "_onLoad", function () { var element = _this._root.current; if (_this.props.onLoad && element) { _this.props.onLoad({ canPlayFastForward: true, canPlayReverse: true, canPlaySlowForward: true, canStepBackward: true, canStepForward: true, canPlaySlowReverse: true, currentTime: element.currentTime, duration: element.duration, naturalSize: { height: element.videoHeight, width: element.videoWidth, orientation: "horizontal" } }); } }); _defineProperty(_assertThisInitialized(_this), "_onError", function (error) { if (_this.props.onError) { _this.props.onError({ error: { '': '', errorString: error instanceof Error ? error.message : "Unexpected error" } }); } }); _defineProperty(_assertThisInitialized(_this), "_onSeek", function () { var element = _this._root.current; if (_this.props.onSeek && element) { _this.props.onSeek({ currentTime: element.currentTime, // @todo add support for these values seekTime: 0, target: 0 }); } }); _defineProperty(_assertThisInitialized(_this), "_onEnd", function () { if (_this.props.onEnd) { _this.props.onEnd(); } }); return _this; } _createClass(Video, [{ key: "componentDidMount", value: function componentDidMount() { var _this$props = this.props, fullscreen = _this$props.fullscreen, rate = _this$props.rate, seek = _this$props.seek; var element = this._root.current; if (element) { if (fullscreen) { (0, _openFullscreen.openFullscreen)(element); } element.addEventListener("progress", this._onProgress); element.addEventListener("seeking", this._onSeek); element.addEventListener("ended", this._onEnd); if (rate) { element.playbackRate = rate; } if (seek) { this.seek(seek); } } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this$props2 = this.props, fullscreen = _this$props2.fullscreen, rate = _this$props2.rate, seek = _this$props2.seek, currentTime = _this$props2.currentTime, paused = _this$props2.paused, muted = _this$props2.muted; var element = this._root.current; if (element) { if (fullscreen !== prevProps.fullscreen) { if (fullscreen) { (0, _openFullscreen.openFullscreen)(element); } else { (0, _closeFullscreen.closeFullscreen)(); } } if (rate !== prevProps.rate && rate) { element.playbackRate = rate; if (this.props.onPlaybackRateChange) { this.props.onPlaybackRateChange({ playbackRate: rate }); } } if (seek !== prevProps.seek && seek) { element.currentTime = seek; } if (currentTime !== prevProps.currentTime && currentTime) { element.currentTime = currentTime; } if (paused !== prevProps.paused && paused !== undefined) { if (paused) { element.pause(); } else { element.play(); } } } } }, { key: "render", value: function render() { var _this$props3 = this.props, volume = _this$props3.volume, muted = _this$props3.muted, controls = _this$props3.controls, paused = _this$props3.paused, style = _this$props3.style; return (0, _react.createElement)('video', { src: this._url, onLoadStart: this._onLoadStart, onLoadedData: this._onLoad, onError: this._onError, onProgress: this._onProgress, onSeeking: this._onSeek, onEnded: this._onEnd, onLoadedMetadata: this.props.onTimedMetadata, onCanPlay: this.props.onReadyForDisplay, onStalled: this.props.onPlaybackStalled, volume: volume, controls: controls, ref: this._root, style: style, paused: paused, muted: muted, autoPlay: true }); } }, { key: "_url", get: function get() { var source = this.props.source; return typeof source !== "number" ? source.uri : source; } }]); return Video; }(_react.Component); exports.Video = Video; var _default = Video; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9WaWRlby50c3giXSwibmFtZXMiOlsiVmlkZW8iLCJ0aW1lIiwiXyIsImVsZW1lbnQiLCJfcm9vdCIsImN1cnJlbnQiLCJjdXJyZW50VGltZSIsImNvbnNvbGUiLCJsb2ciLCJQcm9taXNlIiwicmVzb2x2ZSIsInByb3BzIiwib25Qcm9ncmVzcyIsInBsYXlhYmxlRHVyYXRpb24iLCJzZWVrYWJsZUR1cmF0aW9uIiwib25Mb2FkU3RhcnQiLCJvbkxvYWQiLCJjYW5QbGF5RmFzdEZvcndhcmQiLCJjYW5QbGF5UmV2ZXJzZSIsImNhblBsYXlTbG93Rm9yd2FyZCIsImNhblN0ZXBCYWNrd2FyZCIsImNhblN0ZXBGb3J3YXJkIiwiY2FuUGxheVNsb3dSZXZlcnNlIiwiZHVyYXRpb24iLCJuYXR1cmFsU2l6ZSIsImhlaWdodCIsInZpZGVvSGVpZ2h0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwib3JpZW50YXRpb24iLCJlcnJvciIsIm9uRXJyb3IiLCJlcnJvclN0cmluZyIsIkVycm9yIiwibWVzc2FnZSIsIm9uU2VlayIsInNlZWtUaW1lIiwidGFyZ2V0Iiwib25FbmQiLCJmdWxsc2NyZWVuIiwicmF0ZSIsInNlZWsiLCJhZGRFdmVudExpc3RlbmVyIiwiX29uUHJvZ3Jlc3MiLCJfb25TZWVrIiwiX29uRW5kIiwicGxheWJhY2tSYXRlIiwicHJldlByb3BzIiwicGF1c2VkIiwibXV0ZWQiLCJvblBsYXliYWNrUmF0ZUNoYW5nZSIsInVuZGVmaW5lZCIsInBhdXNlIiwicGxheSIsInZvbHVtZSIsImNvbnRyb2xzIiwic3R5bGUiLCJzcmMiLCJfdXJsIiwiX29uTG9hZFN0YXJ0Iiwib25Mb2FkZWREYXRhIiwiX29uTG9hZCIsIl9vbkVycm9yIiwib25TZWVraW5nIiwib25FbmRlZCIsIm9uTG9hZGVkTWV0YWRhdGEiLCJvblRpbWVkTWV0YWRhdGEiLCJvbkNhblBsYXkiLCJvblJlYWR5Rm9yRGlzcGxheSIsIm9uU3RhbGxlZCIsIm9uUGxheWJhY2tTdGFsbGVkIiwicmVmIiwiYXV0b1BsYXkiLCJzb3VyY2UiLCJ1cmkiLCJDb21wb25lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFJYUEsSzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzREQUNJLHVCOztxRUFPUSxZQUFNLENBQUcsQzs7MkRBRW5CLFVBQUNDLElBQUQsRUFBZUMsQ0FBZixFQUE4QjtBQUMzQyxVQUFNQyxPQUFPLEdBQUcsTUFBS0MsS0FBTCxDQUFXQyxPQUEzQjs7QUFDQSxVQUFJRixPQUFKLEVBQWE7QUFDWkEsUUFBQUEsT0FBTyxDQUFDRyxXQUFSLEdBQXNCTCxJQUF0QjtBQUNBO0FBQ0QsSzs7MkRBRWEsWUFBcUI7QUFDbENNLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLG1CQUFaO0FBQ0EsYUFBT0MsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDQSxLOzs4RUFFZ0MsWUFBTTtBQUN0QyxVQUFNUCxPQUFPLEdBQUcsTUFBS0MsS0FBTCxDQUFXQyxPQUEzQjs7QUFDQSxVQUFJRixPQUFKLEVBQWE7QUFDWiw0Q0FBZUEsT0FBZjtBQUNBO0FBQ0QsSzs7OEVBRWdDLFlBQU07QUFDdEM7QUFDQSxLOztrRUFrRXFCLFlBQU07QUFDM0IsVUFBTUEsT0FBTyxHQUFHLE1BQUtDLEtBQUwsQ0FBV0MsT0FBM0I7O0FBQ0EsVUFBSSxNQUFLTSxLQUFMLENBQVdDLFVBQVgsSUFBeUJULE9BQTdCLEVBQXNDO0FBQ3JDLGNBQUtRLEtBQUwsQ0FBV0MsVUFBWCxDQUFzQjtBQUNyQk4sVUFBQUEsV0FBVyxFQUFFSCxPQUFPLENBQUNHLFdBREE7QUFHckI7QUFDQU8sVUFBQUEsZ0JBQWdCLEVBQUUsQ0FKRztBQUtyQkMsVUFBQUEsZ0JBQWdCLEVBQUU7QUFMRyxTQUF0QjtBQU9BO0FBQ0QsSzs7bUVBRXNCLFlBQU07QUFDNUIsVUFBSSxNQUFLSCxLQUFMLENBQVdJLFdBQWYsRUFBNEI7QUFDM0IsY0FBS0osS0FBTCxDQUFXSSxXQUFYO0FBQ0E7QUFDRCxLOzs4REFFc0QsWUFBTTtBQUM1RCxVQUFNWixPQUFPLEdBQUcsTUFBS0MsS0FBTCxDQUFXQyxPQUEzQjs7QUFDQSxVQUFJLE1BQUtNLEtBQUwsQ0FBV0ssTUFBWCxJQUFxQmIsT0FBekIsRUFBa0M7QUFDakMsY0FBS1EsS0FBTCxDQUFXSyxNQUFYLENBQWtCO0FBQ2pCQyxVQUFBQSxrQkFBa0IsRUFBRSxJQURIO0FBRWpCQyxVQUFBQSxjQUFjLEVBQUUsSUFGQztBQUdqQkMsVUFBQUEsa0JBQWtCLEVBQUUsSUFISDtBQUlqQkMsVUFBQUEsZUFBZSxFQUFFLElBSkE7QUFLakJDLFVBQUFBLGNBQWMsRUFBRSxJQUxDO0FBTWpCQyxVQUFBQSxrQkFBa0IsRUFBRSxJQU5IO0FBT2pCaEIsVUFBQUEsV0FBVyxFQUFFSCxPQUFPLENBQUNHLFdBUEo7QUFRakJpQixVQUFBQSxRQUFRLEVBQUVwQixPQUFPLENBQUNvQixRQVJEO0FBU2pCQyxVQUFBQSxXQUFXLEVBQUU7QUFDWkMsWUFBQUEsTUFBTSxFQUFFdEIsT0FBTyxDQUFDdUIsV0FESjtBQUVaQyxZQUFBQSxLQUFLLEVBQUV4QixPQUFPLENBQUN5QixVQUZIO0FBR1pDLFlBQUFBLFdBQVcsRUFBRTtBQUhEO0FBVEksU0FBbEI7QUFlQTtBQUNELEs7OytEQUVrQixVQUFDQyxLQUFELEVBQWdCO0FBQ2xDLFVBQUksTUFBS25CLEtBQUwsQ0FBV29CLE9BQWYsRUFBd0I7QUFDdkIsY0FBS3BCLEtBQUwsQ0FBV29CLE9BQVgsQ0FBbUI7QUFDbEJELFVBQUFBLEtBQUssRUFBRTtBQUNOLGdCQUFJLEVBREU7QUFFTkUsWUFBQUEsV0FBVyxFQUFFRixLQUFLLFlBQVlHLEtBQWpCLEdBQXlCSCxLQUFLLENBQUNJLE9BQS9CLEdBQXlDO0FBRmhEO0FBRFcsU0FBbkI7QUFNQTtBQUNELEs7OzhEQUVpQixZQUFNO0FBQ3ZCLFVBQU0vQixPQUFPLEdBQUcsTUFBS0MsS0FBTCxDQUFXQyxPQUEzQjs7QUFDQSxVQUFJLE1BQUtNLEtBQUwsQ0FBV3dCLE1BQVgsSUFBcUJoQyxPQUF6QixFQUFrQztBQUNqQyxjQUFLUSxLQUFMLENBQVd3QixNQUFYLENBQWtCO0FBQ2pCN0IsVUFBQUEsV0FBVyxFQUFFSCxPQUFPLENBQUNHLFdBREo7QUFHakI7QUFDQThCLFVBQUFBLFFBQVEsRUFBRSxDQUpPO0FBS2pCQyxVQUFBQSxNQUFNLEVBQUU7QUFMUyxTQUFsQjtBQU9BO0FBQ0QsSzs7NkRBRWdCLFlBQU07QUFDdEIsVUFBSSxNQUFLMUIsS0FBTCxDQUFXMkIsS0FBZixFQUFzQjtBQUNyQixjQUFLM0IsS0FBTCxDQUFXMkIsS0FBWDtBQUNBO0FBQ0QsSzs7Ozs7Ozt3Q0FwSW1CO0FBQUEsd0JBQ2dCLEtBQUszQixLQURyQjtBQUFBLFVBQ1g0QixVQURXLGVBQ1hBLFVBRFc7QUFBQSxVQUNDQyxJQURELGVBQ0NBLElBREQ7QUFBQSxVQUNPQyxJQURQLGVBQ09BLElBRFA7QUFFbkIsVUFBTXRDLE9BQU8sR0FBRyxLQUFLQyxLQUFMLENBQVdDLE9BQTNCOztBQUVBLFVBQUlGLE9BQUosRUFBYTtBQUNaLFlBQUlvQyxVQUFKLEVBQWdCO0FBQ2YsOENBQWVwQyxPQUFmO0FBQ0E7O0FBRURBLFFBQUFBLE9BQU8sQ0FBQ3VDLGdCQUFSLENBQXlCLFVBQXpCLEVBQXFDLEtBQUtDLFdBQTFDO0FBQ0F4QyxRQUFBQSxPQUFPLENBQUN1QyxnQkFBUixDQUF5QixTQUF6QixFQUFvQyxLQUFLRSxPQUF6QztBQUNBekMsUUFBQUEsT0FBTyxDQUFDdUMsZ0JBQVIsQ0FBeUIsT0FBekIsRUFBa0MsS0FBS0csTUFBdkM7O0FBRUEsWUFBSUwsSUFBSixFQUFVO0FBQ1RyQyxVQUFBQSxPQUFPLENBQUMyQyxZQUFSLEdBQXVCTixJQUF2QjtBQUNBOztBQUVELFlBQUlDLElBQUosRUFBVTtBQUNULGVBQUtBLElBQUwsQ0FBVUEsSUFBVjtBQUNBO0FBQ0Q7QUFDRDs7O3VDQUVrQk0sUyxFQUE0QjtBQUFBLHlCQUNpQixLQUFLcEMsS0FEdEI7QUFBQSxVQUN0QzRCLFVBRHNDLGdCQUN0Q0EsVUFEc0M7QUFBQSxVQUMxQkMsSUFEMEIsZ0JBQzFCQSxJQUQwQjtBQUFBLFVBQ3BCQyxJQURvQixnQkFDcEJBLElBRG9CO0FBQUEsVUFDZG5DLFdBRGMsZ0JBQ2RBLFdBRGM7QUFBQSxVQUNEMEMsTUFEQyxnQkFDREEsTUFEQztBQUFBLFVBQ09DLEtBRFAsZ0JBQ09BLEtBRFA7QUFFOUMsVUFBTTlDLE9BQU8sR0FBRyxLQUFLQyxLQUFMLENBQVdDLE9BQTNCOztBQUVBLFVBQUlGLE9BQUosRUFBYTtBQUNaLFlBQUlvQyxVQUFVLEtBQUtRLFNBQVMsQ0FBQ1IsVUFBN0IsRUFBeUM7QUFDeEMsY0FBSUEsVUFBSixFQUFnQjtBQUNmLGdEQUFlcEMsT0FBZjtBQUNBLFdBRkQsTUFFTztBQUNOO0FBQ0E7QUFDRDs7QUFFRCxZQUFJcUMsSUFBSSxLQUFLTyxTQUFTLENBQUNQLElBQW5CLElBQTJCQSxJQUEvQixFQUFxQztBQUNwQ3JDLFVBQUFBLE9BQU8sQ0FBQzJDLFlBQVIsR0FBdUJOLElBQXZCOztBQUVBLGNBQUksS0FBSzdCLEtBQUwsQ0FBV3VDLG9CQUFmLEVBQXFDO0FBQ3BDLGlCQUFLdkMsS0FBTCxDQUFXdUMsb0JBQVgsQ0FBZ0M7QUFDL0JKLGNBQUFBLFlBQVksRUFBRU47QUFEaUIsYUFBaEM7QUFHQTtBQUNEOztBQUVELFlBQUlDLElBQUksS0FBS00sU0FBUyxDQUFDTixJQUFuQixJQUEyQkEsSUFBL0IsRUFBcUM7QUFDcEN0QyxVQUFBQSxPQUFPLENBQUNHLFdBQVIsR0FBc0JtQyxJQUF0QjtBQUNBOztBQUVELFlBQUluQyxXQUFXLEtBQUt5QyxTQUFTLENBQUN6QyxXQUExQixJQUF5Q0EsV0FBN0MsRUFBMEQ7QUFDekRILFVBQUFBLE9BQU8sQ0FBQ0csV0FBUixHQUFzQkEsV0FBdEI7QUFDQTs7QUFFRCxZQUFJMEMsTUFBTSxLQUFLRCxTQUFTLENBQUNDLE1BQXJCLElBQStCQSxNQUFNLEtBQUtHLFNBQTlDLEVBQXlEO0FBQ3hELGNBQUlILE1BQUosRUFBWTtBQUNYN0MsWUFBQUEsT0FBTyxDQUFDaUQsS0FBUjtBQUNBLFdBRkQsTUFFTztBQUNOakQsWUFBQUEsT0FBTyxDQUFDa0QsSUFBUjtBQUNBO0FBQ0Q7QUFDRDtBQUNEOzs7NkJBd0VRO0FBQUEseUJBQzJDLEtBQUsxQyxLQURoRDtBQUFBLFVBQ0EyQyxNQURBLGdCQUNBQSxNQURBO0FBQUEsVUFDUUwsS0FEUixnQkFDUUEsS0FEUjtBQUFBLFVBQ2VNLFFBRGYsZ0JBQ2VBLFFBRGY7QUFBQSxVQUN5QlAsTUFEekIsZ0JBQ3lCQSxNQUR6QjtBQUFBLFVBQ2lDUSxLQURqQyxnQkFDaUNBLEtBRGpDO0FBR1IsYUFDQywwQkFBYyxPQUFkLEVBQXVCO0FBQ3RCQyxRQUFBQSxHQUFHLEVBQUUsS0FBS0MsSUFEWTtBQUV0QjNDLFFBQUFBLFdBQVcsRUFBRSxLQUFLNEMsWUFGSTtBQUd0QkMsUUFBQUEsWUFBWSxFQUFFLEtBQUtDLE9BSEc7QUFJdEI5QixRQUFBQSxPQUFPLEVBQUUsS0FBSytCLFFBSlE7QUFLdEJsRCxRQUFBQSxVQUFVLEVBQUUsS0FBSytCLFdBTEs7QUFNdEJvQixRQUFBQSxTQUFTLEVBQUUsS0FBS25CLE9BTk07QUFPdEJvQixRQUFBQSxPQUFPLEVBQUUsS0FBS25CLE1BUFE7QUFRdEJvQixRQUFBQSxnQkFBZ0IsRUFBRSxLQUFLdEQsS0FBTCxDQUFXdUQsZUFSUDtBQVN0QkMsUUFBQUEsU0FBUyxFQUFFLEtBQUt4RCxLQUFMLENBQVd5RCxpQkFUQTtBQVV0QkMsUUFBQUEsU0FBUyxFQUFFLEtBQUsxRCxLQUFMLENBQVcyRCxpQkFWQTtBQVd0QmhCLFFBQUFBLE1BQU0sRUFBTkEsTUFYc0I7QUFZdEJDLFFBQUFBLFFBQVEsRUFBUkEsUUFac0I7QUFhdEJnQixRQUFBQSxHQUFHLEVBQUUsS0FBS25FLEtBYlk7QUFjdEJvRCxRQUFBQSxLQUFLLEVBQUxBLEtBZHNCO0FBZXRCUixRQUFBQSxNQUFNLEVBQU5BLE1BZnNCO0FBZ0J0QkMsUUFBQUEsS0FBSyxFQUFMQSxLQWhCc0I7QUFpQnRCdUIsUUFBQUEsUUFBUSxFQUFFO0FBakJZLE9BQXZCLENBREQ7QUFxQkE7Ozt3QkE1TCtDO0FBQUEsVUFDdkNDLE1BRHVDLEdBQzVCLEtBQUs5RCxLQUR1QixDQUN2QzhELE1BRHVDO0FBRS9DLGFBQU8sT0FBT0EsTUFBUCxLQUFrQixRQUFsQixHQUE2QkEsTUFBTSxDQUFDQyxHQUFwQyxHQUEwQ0QsTUFBakQ7QUFDQTs7OztFQU55QkUsZ0I7OztlQWtNWjNFLEsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBDb21wb25lbnQsIFJlYWN0RXZlbnRIYW5kbGVyLCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBWaWRlb1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdC1uYXRpdmUtdmlkZW8nO1xuaW1wb3J0IHsgb3BlbkZ1bGxzY3JlZW4gfSBmcm9tICcuL3V0aWxzL29wZW4tZnVsbHNjcmVlbic7XG5pbXBvcnQgeyBjbG9zZUZ1bGxzY3JlZW4gfSBmcm9tICcuL3V0aWxzL2Nsb3NlLWZ1bGxzY3JlZW4nO1xuXG5leHBvcnQgdHlwZSBWaWRlb1NvdXJjZSA9IHsgdXJpPzogc3RyaW5nIH0gfCBudW1iZXJcblxuZXhwb3J0IGNsYXNzIFZpZGVvIGV4dGVuZHMgQ29tcG9uZW50PFZpZGVvUHJvcGVydGllcz4ge1xuXHRwcml2YXRlIF9yb290ID0gY3JlYXRlUmVmPEhUTUxWaWRlb0VsZW1lbnQ+KCk7XG5cblx0cHJpdmF0ZSBnZXQgX3VybCgpOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHsgc291cmNlIH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybiB0eXBlb2Ygc291cmNlICE9PSBcIm51bWJlclwiID8gc291cmNlLnVyaSA6IHNvdXJjZVxuXHR9XG5cblx0cHVibGljIHNldE5hdGl2ZVByb3BzID0gKCkgPT4geyB9XG5cblx0cHVibGljIHNlZWsgPSAodGltZTogbnVtYmVyLCBfPzogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuX3Jvb3QuY3VycmVudDtcblx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0ZWxlbWVudC5jdXJyZW50VGltZSA9IHRpbWU7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNhdmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0Y29uc29sZS5sb2coXCJTYXZpbmcgaW4gbG9jYWwuLlwiKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRwdWJsaWMgcHJlc2VudEZ1bGxzY3JlZW5QbGF5ZXIgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuX3Jvb3QuY3VycmVudDtcblx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0b3BlbkZ1bGxzY3JlZW4oZWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRpc21pc3NGdWxsc2NyZWVuUGxheWVyID0gKCkgPT4ge1xuXHRcdGNsb3NlRnVsbHNjcmVlbigpO1xuXHR9XG5cblx0Y29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0Y29uc3QgeyBmdWxsc2NyZWVuLCByYXRlLCBzZWVrIH0gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9yb290LmN1cnJlbnQ7XG5cblx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0aWYgKGZ1bGxzY3JlZW4pIHtcblx0XHRcdFx0b3BlbkZ1bGxzY3JlZW4oZWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsIHRoaXMuX29uUHJvZ3Jlc3MpXG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWVraW5nXCIsIHRoaXMuX29uU2Vlayk7XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJlbmRlZFwiLCB0aGlzLl9vbkVuZCk7XG5cblx0XHRcdGlmIChyYXRlKSB7XG5cdFx0XHRcdGVsZW1lbnQucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlZWspIHtcblx0XHRcdFx0dGhpcy5zZWVrKHNlZWspXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogVmlkZW9Qcm9wZXJ0aWVzKSB7XG5cdFx0Y29uc3QgeyBmdWxsc2NyZWVuLCByYXRlLCBzZWVrLCBjdXJyZW50VGltZSwgcGF1c2VkLCBtdXRlZCB9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5fcm9vdC5jdXJyZW50O1xuXG5cdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdGlmIChmdWxsc2NyZWVuICE9PSBwcmV2UHJvcHMuZnVsbHNjcmVlbikge1xuXHRcdFx0XHRpZiAoZnVsbHNjcmVlbikge1xuXHRcdFx0XHRcdG9wZW5GdWxsc2NyZWVuKGVsZW1lbnQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNsb3NlRnVsbHNjcmVlbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyYXRlICE9PSBwcmV2UHJvcHMucmF0ZSAmJiByYXRlKSB7XG5cdFx0XHRcdGVsZW1lbnQucGxheWJhY2tSYXRlID0gcmF0ZTtcblxuXHRcdFx0XHRpZiAodGhpcy5wcm9wcy5vblBsYXliYWNrUmF0ZUNoYW5nZSkge1xuXHRcdFx0XHRcdHRoaXMucHJvcHMub25QbGF5YmFja1JhdGVDaGFuZ2Uoe1xuXHRcdFx0XHRcdFx0cGxheWJhY2tSYXRlOiByYXRlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlZWsgIT09IHByZXZQcm9wcy5zZWVrICYmIHNlZWspIHtcblx0XHRcdFx0ZWxlbWVudC5jdXJyZW50VGltZSA9IHNlZWs7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50VGltZSAhPT0gcHJldlByb3BzLmN1cnJlbnRUaW1lICYmIGN1cnJlbnRUaW1lKSB7XG5cdFx0XHRcdGVsZW1lbnQuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhdXNlZCAhPT0gcHJldlByb3BzLnBhdXNlZCAmJiBwYXVzZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAocGF1c2VkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5wYXVzZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW1lbnQucGxheSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfb25Qcm9ncmVzcyA9ICgpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5fcm9vdC5jdXJyZW50O1xuXHRcdGlmICh0aGlzLnByb3BzLm9uUHJvZ3Jlc3MgJiYgZWxlbWVudCkge1xuXHRcdFx0dGhpcy5wcm9wcy5vblByb2dyZXNzKHtcblx0XHRcdFx0Y3VycmVudFRpbWU6IGVsZW1lbnQuY3VycmVudFRpbWUsXG5cblx0XHRcdFx0Ly8gQHRvZG8gYWRkIHN1cHBvcnQgZm9yIHRoZXNlIHZhbHVlc1xuXHRcdFx0XHRwbGF5YWJsZUR1cmF0aW9uOiAwLFxuXHRcdFx0XHRzZWVrYWJsZUR1cmF0aW9uOiAwLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfb25Mb2FkU3RhcnQgPSAoKSA9PiB7XG5cdFx0aWYgKHRoaXMucHJvcHMub25Mb2FkU3RhcnQpIHtcblx0XHRcdHRoaXMucHJvcHMub25Mb2FkU3RhcnQoKTtcblx0XHR9XG5cdH07XG5cblx0cHJpdmF0ZSBfb25Mb2FkOiBSZWFjdEV2ZW50SGFuZGxlcjxIVE1MVmlkZW9FbGVtZW50PiA9ICgpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5fcm9vdC5jdXJyZW50O1xuXHRcdGlmICh0aGlzLnByb3BzLm9uTG9hZCAmJiBlbGVtZW50KSB7XG5cdFx0XHR0aGlzLnByb3BzLm9uTG9hZCh7XG5cdFx0XHRcdGNhblBsYXlGYXN0Rm9yd2FyZDogdHJ1ZSxcblx0XHRcdFx0Y2FuUGxheVJldmVyc2U6IHRydWUsXG5cdFx0XHRcdGNhblBsYXlTbG93Rm9yd2FyZDogdHJ1ZSxcblx0XHRcdFx0Y2FuU3RlcEJhY2t3YXJkOiB0cnVlLFxuXHRcdFx0XHRjYW5TdGVwRm9yd2FyZDogdHJ1ZSxcblx0XHRcdFx0Y2FuUGxheVNsb3dSZXZlcnNlOiB0cnVlLFxuXHRcdFx0XHRjdXJyZW50VGltZTogZWxlbWVudC5jdXJyZW50VGltZSxcblx0XHRcdFx0ZHVyYXRpb246IGVsZW1lbnQuZHVyYXRpb24sXG5cdFx0XHRcdG5hdHVyYWxTaXplOiB7XG5cdFx0XHRcdFx0aGVpZ2h0OiBlbGVtZW50LnZpZGVvSGVpZ2h0LFxuXHRcdFx0XHRcdHdpZHRoOiBlbGVtZW50LnZpZGVvV2lkdGgsXG5cdFx0XHRcdFx0b3JpZW50YXRpb246IFwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIF9vbkVycm9yID0gKGVycm9yOiBhbnkpID0+IHtcblx0XHRpZiAodGhpcy5wcm9wcy5vbkVycm9yKSB7XG5cdFx0XHR0aGlzLnByb3BzLm9uRXJyb3Ioe1xuXHRcdFx0XHRlcnJvcjoge1xuXHRcdFx0XHRcdCcnOiAnJyxcblx0XHRcdFx0XHRlcnJvclN0cmluZzogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVuZXhwZWN0ZWQgZXJyb3JcIixcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgX29uU2VlayA9ICgpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5fcm9vdC5jdXJyZW50O1xuXHRcdGlmICh0aGlzLnByb3BzLm9uU2VlayAmJiBlbGVtZW50KSB7XG5cdFx0XHR0aGlzLnByb3BzLm9uU2Vlayh7XG5cdFx0XHRcdGN1cnJlbnRUaW1lOiBlbGVtZW50LmN1cnJlbnRUaW1lLFxuXG5cdFx0XHRcdC8vIEB0b2RvIGFkZCBzdXBwb3J0IGZvciB0aGVzZSB2YWx1ZXNcblx0XHRcdFx0c2Vla1RpbWU6IDAsXG5cdFx0XHRcdHRhcmdldDogMCxcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIF9vbkVuZCA9ICgpID0+IHtcblx0XHRpZiAodGhpcy5wcm9wcy5vbkVuZCkge1xuXHRcdFx0dGhpcy5wcm9wcy5vbkVuZCgpO1xuXHRcdH1cblx0fTtcblxuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3QgeyB2b2x1bWUsIG11dGVkLCBjb250cm9scywgcGF1c2VkLCBzdHlsZSB9ID0gdGhpcy5wcm9wcztcblxuXHRcdHJldHVybiAoXG5cdFx0XHRjcmVhdGVFbGVtZW50KCd2aWRlbycsIHtcblx0XHRcdFx0c3JjOiB0aGlzLl91cmwsXG5cdFx0XHRcdG9uTG9hZFN0YXJ0OiB0aGlzLl9vbkxvYWRTdGFydCxcblx0XHRcdFx0b25Mb2FkZWREYXRhOiB0aGlzLl9vbkxvYWQsXG5cdFx0XHRcdG9uRXJyb3I6IHRoaXMuX29uRXJyb3IsXG5cdFx0XHRcdG9uUHJvZ3Jlc3M6IHRoaXMuX29uUHJvZ3Jlc3MsXG5cdFx0XHRcdG9uU2Vla2luZzogdGhpcy5fb25TZWVrLFxuXHRcdFx0XHRvbkVuZGVkOiB0aGlzLl9vbkVuZCxcblx0XHRcdFx0b25Mb2FkZWRNZXRhZGF0YTogdGhpcy5wcm9wcy5vblRpbWVkTWV0YWRhdGEsXG5cdFx0XHRcdG9uQ2FuUGxheTogdGhpcy5wcm9wcy5vblJlYWR5Rm9yRGlzcGxheSxcblx0XHRcdFx0b25TdGFsbGVkOiB0aGlzLnByb3BzLm9uUGxheWJhY2tTdGFsbGVkLFxuXHRcdFx0XHR2b2x1bWUsXG5cdFx0XHRcdGNvbnRyb2xzLFxuXHRcdFx0XHRyZWY6IHRoaXMuX3Jvb3QsXG5cdFx0XHRcdHN0eWxlLFxuXHRcdFx0XHRwYXVzZWQsXG5cdFx0XHRcdG11dGVkLFxuXHRcdFx0XHRhdXRvUGxheTogdHJ1ZVxuXHRcdFx0fSlcblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlkZW87XG4iXX0=