'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // videoSlide 开始 function initVideoSlideEvent() { var VideoSlide = function VideoSlide(selector, options) { var _this2 = this; _classCallCheck(this, VideoSlide); this.boxScroll = function () { var scrollW = _this2.config.toggle === 1 ? -_this2.currentIndex * (parseFloat(_this2.siwperSlideList[0].style.width) * _this2.config.show) : -_this2.currentIndex * parseFloat(_this2.siwperSlideList[0].style.width); var newVal = _this2.trackBoxWidth - _this2.scrollWidth >= -scrollW ? scrollW : scrollW - (_this2.trackBoxWidt_this2.scrollWidth - _this2.currentIndex * _this2.scrollWidth); _this2.trackBox.style.transform = 'translate3d(' + newVal + 'px, 0px, 0px)'; }; this.changeDots = function () { if (!_this2.options.showDots) { return 0; } _this2.dotsList.forEach(function (el) { if (Number(el.dataset.index) === _this2.currentIndex) { el.classList.add('active'); } else { el.classList.remove('active'); } }); }; this.btnClick = function (e) { var newIndex = _this2.currentIndex + parseInt(e.currentTarget.dataset.direction); if (newIndex >= 0 && newIndex < _this2.dotsCount) { _this2.currentIndex = newIndex; _this2.boxScroll(); _this2.changeDots(); } }; this.dotsClick = function (e) { if (!isNaN(e.target.dataset.index)) { _this2.currentIndex = Number(e.target.dataset.index); _this2.boxScroll(); _this2.changeDots(); } }; this.initSwiperDots = function () { _this2.dotsBox.removeEventListener('click', _this2.dotsClick, false); _this2.dotsCount = _this2.config.toggle === 1 ? Math.ceil(_this2.trackBoxWidth / _this2.scrollWidth) : Math.ceil((_this2.trackBoxWidth - _this2.scrollWidth) / _this2.sliderWidth) + 1; var temInnerHtml = ''; for (var i = 0; i < _this2.dotsCount; i++) { temInnerHtml += '
  • '; } _this2.dotsBox.innerHTML = temInnerHtml; _this2.dotsList = Array.from(_this2.swiperContainer.querySelectorAll('.swiper-dots-item')); _this2.dotsBox.addEventListener('click', _this2.dotsClick, false); if (!_this2.options.showDots) { _this2.dotsBox.style.display = 'none'; } }; this.initSwiperSlider = function () { _this2.currentIndex = 0; _this2.btnList.forEach(function (el) { el.removeEventListener('click', _this2.btnClick, false); }); _this2.sliderWidth = _this2.config.width / _this2.config.show; _this2.trackBoxWidth = _this2.siwperSlideList.length * _this2.sliderWidth; _this2.scrollWidth = _this2.sliderWidth * _this2.config.show; _this2.trackBox.style.width = _this2.trackBoxWidth + 'px'; _this2.trackBox.style.transform = 'translate3d(0px, 0px, 0px)'; _this2.siwperSlideList.forEach(function (el) { el.style.width = window.innerWidth > _this2.sliderWidth ? _this2.sliderWidth + 'px' : window.innerWidth - 30 + 'px'; console.log(_this2.config.width); }); _this2.btnList.forEach(function (el) { el.addEventListener('click', _this2.btnClick, false); }); _this2.initSwiperDots(); }; this.changeSlide = function () { var _this = _this2; function isBoundary(val) { return val >= 0 && val <= _this.dotsCount - 1; } if (_this2.dragDistance > 100) { var newIndex = _this2.currentIndex - 1; if (isBoundary(newIndex)) { _this2.currentIndex = newIndex; } } else if (_this2.dragDistance < -100) { var _newIndex = _this2.currentIndex + 1; if (isBoundary(_newIndex)) { _this2.currentIndex = _newIndex; } } _this2.boxScroll(); _this2.changeDots(); }; this.startTouch = function (e) { e.stopPropagation(); _this2.dragDistance = e.changedTouches[0].clientX; }; this.endTouch = function (e) { e.stopPropagation(); _this2.dragDistance = e.changedTouches[0].clientX - _this2.dragDistance; _this2.changeSlide(); }; this.initTouchSlider = function () { var remove = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; if (remove) { _this2.touchEl.removeEventListener('touchstart', _this2.startTouch, { passive: true }); _this2.touchEl.removeEventListener('touchend', _this2.endTouch, { passive: true }); return 0; } _this2.touchEl.addEventListener('touchstart', _this2.startTouch, { passive: true }); _this2.touchEl.addEventListener('touchend', _this2.endTouch, { passive: true }); }; this.reRender = function (windowWidth) { if (_this2.currentWidth <= 1920 && windowWidth > 1486 && _this2.currentWidth !== 1920) { _this2.currentWidth = 1920; _this2.config = _this2.sliderObj[1920]; _this2.initSwiperSlider(); _this2.initTouchSlider(); } else if (windowWidth <= 1486 && windowWidth > 1440 && _this2.currentWidth !== 1486) { _this2.currentWidth = 1486; _this2.config = _this2.sliderObj[1486]; _this2.initSwiperSlider(); _this2.initTouchSlider(); } else if (windowWidth <= 1440 && windowWidth > 1200 && _this2.currentWidth !== 1440) { _this2.currentWidth = 1440; _this2.config = _this2.sliderObj[1440]; _this2.initSwiperSlider(); _this2.initTouchSlider(); } else if (windowWidth <= 1200 && windowWidth > 992 && _this2.currentWidth !== 1200) { _this2.currentWidth = 1200; _this2.config = _this2.sliderObj[1200]; _this2.initSwiperSlider(); _this2.initTouchSlider(); } else if (windowWidth <= 992 && windowWidth > 768 && _this2.currentWidth !== 992) { _this2.currentWidth = 992; _this2.config = _this2.sliderObj[992]; _this2.initSwiperSlider(); _this2.initTouchSlider(); } else if (windowWidth <= 768 && _this2.currentWidth !== 768) { _this2.currentWidth = 768; _this2.config = _this2.sliderObj[768]; _this2.initSwiperSlider(); _this2.initTouchSlider(false); } }; this.onResize = function () { var _this = _this2; window.addEventListener('resize', function () { var windowWidth = Number(window.innerWidth); _this.reRender(windowWidth); }); }; this.swiperContainer = document.querySelector('' + selector); this.currentIndex = 0; this.siwperSlideList = Array.from(this.swiperContainer.querySelector('.swiper-list').querySelectorAll('.swiper-slide')); this.trackBox = this.swiperContainer.querySelector('.swiper-track'); this.dotsBox = this.swiperContainer.querySelector('.swiper-dots-list'); this.btnList = Array.from(this.swiperContainer.querySelectorAll('.btn-swiper')); this.touchEl = this.swiperContainer.querySelector('.draggable'); this.currentWidth = 0; this.dotsList = null; this.config = null; this.sliderWidth = 0; this.trackBoxWidth = 0; this.scrollWidth = 0; this.dotsCount = 0; this.dragDistance = 0; this.sliderObj = { 1920: { width: 1200, show: 3, toggle: 1 }, 1486: { width: 1200, show: 3, toggle: 1 }, 1440: { width: 1200, show: 3, toggle: 1 }, 1200: { width: 930, show: 3, toggle: 0 }, 992: { width: 690, show: 2, toggle: 0 }, 768: { width: 360, show: 2, toggle: 0 } }; this.options = _extends({ showDots: true }, options); this.reRender(Number(window.innerWidth)); this.onResize(); } // 点击初始化 // 移动端滑动初始化 ; new VideoSlide('#TPMTPx4zGUkt1J4Vyco4gdaY211216_container', { showDots: false }); } window.addEventListener('load', initVideoSlideEvent); // videoSlide 结束 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIklubGluZSBCYWJlbCBzY3JpcHQgKDUpIl0sIm5hbWVzIjpbImluaXRWaWRlb1NsaWRlRXZlbnQiLCJWaWRlb1NsaWRlIiwic2VsZWN0b3IiLCJvcHRpb25zIiwiYm94U2Nyb2xsIiwic2Nyb2xsVyIsImNvbmZpZyIsInRvZ2dsZSIsImN1cnJlbnRJbmRleCIsInBhcnNlRmxvYXQiLCJzaXdwZXJTbGlkZUxpc3QiLCJzdHlsZSIsIndpZHRoIiwic2hvdyIsIm5ld1ZhbCIsInRyYWNrQm94V2lkdGgiLCJzY3JvbGxXaWR0aCIsInRyYWNrQm94IiwidHJhbnNmb3JtIiwiY2hhbmdlRG90cyIsInNob3dEb3RzIiwiZG90c0xpc3QiLCJmb3JFYWNoIiwiTnVtYmVyIiwiZWwiLCJkYXRhc2V0IiwiaW5kZXgiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCJidG5DbGljayIsImUiLCJuZXdJbmRleCIsInBhcnNlSW50IiwiY3VycmVudFRhcmdldCIsImRpcmVjdGlvbiIsImRvdHNDb3VudCIsImRvdHNDbGljayIsImlzTmFOIiwidGFyZ2V0IiwiaW5pdFN3aXBlckRvdHMiLCJkb3RzQm94IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIk1hdGgiLCJjZWlsIiwic2xpZGVyV2lkdGgiLCJ0ZW1Jbm5lckh0bWwiLCJpIiwiaW5uZXJIVE1MIiwiQXJyYXkiLCJmcm9tIiwic3dpcGVyQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwbGF5IiwiaW5pdFN3aXBlclNsaWRlciIsImJ0bkxpc3QiLCJsZW5ndGgiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiY29uc29sZSIsImxvZyIsImNoYW5nZVNsaWRlIiwiX3RoaXMiLCJpc0JvdW5kYXJ5IiwidmFsIiwiZHJhZ0Rpc3RhbmNlIiwic3RhcnRUb3VjaCIsInN0b3BQcm9wYWdhdGlvbiIsImNoYW5nZWRUb3VjaGVzIiwiY2xpZW50WCIsImVuZFRvdWNoIiwiaW5pdFRvdWNoU2xpZGVyIiwidG91Y2hFbCIsInBhc3NpdmUiLCJyZVJlbmRlciIsIndpbmRvd1dpZHRoIiwiY3VycmVudFdpZHRoIiwic2xpZGVyT2JqIiwib25SZXNpemUiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBO0FBQ0EsU0FBU0EsbUJBQVQsR0FBK0I7QUFBQSxRQUNyQkMsVUFEcUIsR0FFdkIsb0JBQWFDLFFBQWIsRUFBdUJDLE9BQXZCLEVBQWdDO0FBQUE7O0FBQUE7O0FBQUEsYUFnQ2hDQyxTQWhDZ0MsR0FnQ3BCLFlBQU07QUFDZCxnQkFBSUMsVUFBVSxPQUFLQyxNQUFMLENBQVlDLE1BQVosS0FBdUIsQ0FBdkIsR0FBMkIsQ0FBRSxPQUFLQyxZQUFQLElBQXVCQyxXQUFXLE9BQUtDLGVBQUwsQ0FBcUIsQ0FBckIsRUFBd0JDLEtBQXhCLENBQThCQyxLQUF6QyxJQUFrRCxPQUFLTixNQUFMLENBQVlPLElBQXJGLENBQTNCLEdBQXdILENBQUUsT0FBS0wsWUFBUCxHQUFzQkMsV0FBVyxPQUFLQyxlQUFMLENBQXFCLENBQXJCLEVBQXdCQyxLQUF4QixDQUE4QkMsS0FBekMsQ0FBNUo7QUFDQSxnQkFBTUUsU0FBUyxPQUFLQyxhQUFMLEdBQXFCLE9BQUtDLFdBQTFCLElBQXlDLENBQUNYLE9BQTFDLEdBQW9EQSxPQUFwRCxHQUE4REEsV0FBVyxPQUFLVSxhQUFMLEdBQXFCLE9BQUtDLFdBQTFCLEdBQXdDLE9BQUtSLFlBQUwsR0FBb0IsT0FBS1EsV0FBNUUsQ0FBN0U7QUFDQSxtQkFBS0MsUUFBTCxDQUFjTixLQUFkLENBQW9CTyxTQUFwQixvQkFBK0NKLE1BQS9DO0FBQ0gsU0FwQytCOztBQUFBLGFBc0NoQ0ssVUF0Q2dDLEdBc0NuQixZQUFNO0FBQ2YsZ0JBQUksQ0FBQyxPQUFLaEIsT0FBTCxDQUFhaUIsUUFBbEIsRUFBNEI7QUFDeEIsdUJBQU8sQ0FBUDtBQUNIO0FBQ0QsbUJBQUtDLFFBQUwsQ0FBY0MsT0FBZCxDQUFzQixjQUFNO0FBQ3hCLG9CQUFJQyxP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TlEsU0FBakI7QUFRQSxhQUFLSixPQUFMO0FBQ0lpQixzQkFBVTtBQURkLFdBRU9qQixPQUZQO0FBSUEsYUFBS3dFLFFBQUwsQ0FBY3BELE9BQU9tQyxPQUFPQyxVQUFkLENBQWQ7QUFDQSxhQUFLb0IsUUFBTDtBQUNIOztBQXdERDs7O0FBeUJBO0FBakh1Qjs7QUFvTTNCLFFBQUk5RSxVQUFKLENBQWUsMkNBQWYsRUFBNEQ7QUFDeERtQixrQkFBVTtBQUQ4QyxLQUE1RDtBQUdIO0FBQ0RzQyxPQUFPTCxnQkFBUCxDQUF3QixNQUF4QixFQUFnQ3JELG1CQUFoQztBQUNBIiwiZmlsZSI6IklubGluZSBCYWJlbCBzY3JpcHQgKDUpIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyB2aWRlb1NsaWRlIOW8gOWni1xuZnVuY3Rpb24gaW5pdFZpZGVvU2xpZGVFdmVudCgpIHtcbiAgICBjbGFzcyBWaWRlb1NsaWRlIHtcbiAgICAgICAgY29uc3RydWN0b3IgKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXBlckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCR7c2VsZWN0b3J9YClcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMFxuICAgICAgICAgICAgdGhpcy5zaXdwZXJTbGlkZUxpc3QgPSAgQXJyYXkuZnJvbSh0aGlzLnN3aXBlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLWxpc3QnKS5xdWVyeVNlbGVjdG9yQWxsKCcuc3dpcGVyLXNsaWRlJykpXG4gICAgICAgICAgICB0aGlzLnRyYWNrQm94ID0gdGhpcy5zd2lwZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLnN3aXBlci10cmFjaycpXG4gICAgICAgICAgICB0aGlzLmRvdHNCb3ggPSB0aGlzLnN3aXBlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLWRvdHMtbGlzdCcpXG4gICAgICAgICAgICB0aGlzLmJ0bkxpc3QgPSBBcnJheS5mcm9tKHRoaXMuc3dpcGVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5idG4tc3dpcGVyJykpXG4gICAgICAgICAgICB0aGlzLnRvdWNoRWwgPSB0aGlzLnN3aXBlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuZHJhZ2dhYmxlJylcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gMFxuICAgICAgICAgICAgdGhpcy5kb3RzTGlzdCA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gbnVsbFxuICAgICAgICAgICAgdGhpcy5zbGlkZXJXaWR0aCA9IDBcbiAgICAgICAgICAgIHRoaXMudHJhY2tCb3hXaWR0aCA9IDBcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsV2lkdGggPSAwXG4gICAgICAgICAgICB0aGlzLmRvdHNDb3VudCA9IDBcbiAgICAgICAgICAgIHRoaXMuZHJhZ0Rpc3RhbmNlID0gMFxuICAgICAgICAgICAgdGhpcy5zbGlkZXJPYmogPSB7XG4gICAgICAgICAgICAgICAgMTkyMDogeyB3aWR0aDogMTIwMCwgc2hvdzogMywgdG9nZ2xlOiAxIH0sXG4gICAgICAgICAgICAgICAgMTQ4NjogeyB3aWR0aDogMTIwMCwgc2hvdzogMywgdG9nZ2xlOiAxIH0sXG4gICAgICAgICAgICAgICAgMTQ0MDogeyB3aWR0aDogMTIwMCwgc2hvdzogMywgdG9nZ2xlOiAxIH0sXG4gICAgICAgICAgICAgICAgMTIwMDogeyB3aWR0aDogOTMwLCBzaG93OiAzLCB0b2dnbGU6IDAgfSxcbiAgICAgICAgICAgICAgICA5OTI6IHsgd2lkdGg6IDY5MCwgc2hvdzogMiwgdG9nZ2xlOiAwIH0sXG4gICAgICAgICAgICAgICAgNzY4OiB7IHdpZHRoOiAzNjAsIHNob3c6IDIsIHRvZ2dsZTogMCB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHNob3dEb3RzOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVSZW5kZXIoTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSlcbiAgICAgICAgICAgIHRoaXMub25SZXNpemUoKVxuICAgICAgICB9XG5cbiAgICAgICAgYm94U2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHNjcm9sbFcgPSB0aGlzLmNvbmZpZy50b2dnbGUgPT09IDEgPyAtIHRoaXMuY3VycmVudEluZGV4ICogKHBhcnNlRmxvYXQodGhpcy5zaXdwZXJTbGlkZUxpc3RbMF0uc3R5bGUud2lkdGgpICogdGhpcy5jb25maWcuc2hvdykgOiAtIHRoaXMuY3VycmVudEluZGV4ICogcGFyc2VGbG9hdCh0aGlzLnNpd3BlclNsaWRlTGlzdFswXS5zdHlsZS53aWR0aClcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMudHJhY2tCb3hXaWR0aCAtIHRoaXMuc2Nyb2xsV2lkdGggPj0gLXNjcm9sbFcgPyBzY3JvbGxXIDogc2Nyb2xsVyAtICh0aGlzLnRyYWNrQm94V2lkdGggLSB0aGlzLnNjcm9sbFdpZHRoIC0gdGhpcy5jdXJyZW50SW5kZXggKiB0aGlzLnNjcm9sbFdpZHRoKVxuICAgICAgICAgICAgdGhpcy50cmFja0JveC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHtuZXdWYWx9cHgsIDBweCwgMHB4KWA7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFuZ2VEb3RzID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0RvdHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kb3RzTGlzdC5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGVsLmRhdGFzZXQuaW5kZXgpID09PSB0aGlzLmN1cnJlbnRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGJ0bkNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdJbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICsgcGFyc2VJbnQoZS5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuZGlyZWN0aW9uKVxuICAgICAgICAgICAgaWYgKG5ld0luZGV4ID49IDAgJiYgbmV3SW5kZXggPCB0aGlzLmRvdHNDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gbmV3SW5kZXhcbiAgICAgICAgICAgICAgICB0aGlzLmJveFNjcm9sbCgpXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEb3RzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRvdHNDbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKGUudGFyZ2V0LmRhdGFzZXQuaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBOdW1iZXIoZS50YXJnZXQuZGF0YXNldC5pbmRleClcbiAgICAgICAgICAgICAgICB0aGlzLmJveFNjcm9sbCgpXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEb3RzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluaXRTd2lwZXJEb3RzID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb3RzQm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb3RzQ2xpY2ssIGZhbHNlKVxuXG4gICAgICAgICAgICB0aGlzLmRvdHNDb3VudCA9IHRoaXMuY29uZmlnLnRvZ2dsZSA9PT0gMSA/IE1hdGguY2VpbCh0aGlzLnRyYWNrQm94V2lkdGggLyB0aGlzLnNjcm9sbFdpZHRoKSA6IE1hdGguY2VpbCgodGhpcy50cmFja0JveFdpZHRoIC0gdGhpcy5zY3JvbGxXaWR0aCkgLyB0aGlzLnNsaWRlcldpZHRoKSArIDFcbiAgICAgICAgICAgIGxldCB0ZW1Jbm5lckh0bWwgPSAnJ1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvdHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGVtSW5uZXJIdG1sICs9IGA8bGkgY2xhc3M9J3N3aXBlci1kb3RzLWl0ZW0gJHtpID09PSB0aGlzLmN1cnJlbnRJbmRleCA/ICdhY3RpdmUnIDogJyd9JyBkYXRhLWluZGV4PScke2l9Jz48L2xpPmBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZG90c0JveC5pbm5lckhUTUwgPSB0ZW1Jbm5lckh0bWxcbiAgICAgICAgICAgIHRoaXMuZG90c0xpc3QgPSBBcnJheS5mcm9tKHRoaXMuc3dpcGVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zd2lwZXItZG90cy1pdGVtJykpXG5cbiAgICAgICAgICAgIHRoaXMuZG90c0JveC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG90c0NsaWNrLCBmYWxzZSlcblxuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0RvdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvdHNCb3guc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g54K55Ye75Yid5aeL5YyWXG4gICAgICAgIGluaXRTd2lwZXJTbGlkZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDBcbiAgICAgICAgICAgIHRoaXMuYnRuTGlzdC5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYnRuQ2xpY2ssIGZhbHNlKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpcy5zbGlkZXJXaWR0aCA9IHRoaXMuY29uZmlnLndpZHRoIC8gdGhpcy5jb25maWcuc2hvd1xuICAgICAgICAgICAgdGhpcy50cmFja0JveFdpZHRoID0gdGhpcy5zaXdwZXJTbGlkZUxpc3QubGVuZ3RoICogdGhpcy5zbGlkZXJXaWR0aFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxXaWR0aCA9IHRoaXMuc2xpZGVyV2lkdGggKiB0aGlzLmNvbmZpZy5zaG93XG4gICAgICAgICAgICB0aGlzLnRyYWNrQm94LnN0eWxlLndpZHRoID0gdGhpcy50cmFja0JveFdpZHRoICsgJ3B4J1xuICAgICAgICAgICAgdGhpcy50cmFja0JveC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCknO1xuICAgICAgICAgICAgdGhpcy5zaXdwZXJTbGlkZUxpc3QuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAgICAgZWwuc3R5bGUud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCA+IHRoaXMuc2xpZGVyV2lkdGggPyB0aGlzLnNsaWRlcldpZHRoICsgJ3B4JyA6IHdpbmRvdy5pbm5lcldpZHRoIC0gMzAgKyAncHgnXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25maWcud2lkdGgpXG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRoaXMuYnRuTGlzdC5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYnRuQ2xpY2ssIGZhbHNlKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpcy5pbml0U3dpcGVyRG90cygpXG4gICAgICAgIH1cblxuICAgICAgICAvLyDnp7vliqjnq6/mu5HliqjliJ3lp4vljJZcbiAgICAgICAgY2hhbmdlU2xpZGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXNcbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzQm91bmRhcnkgKHZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPj0gMCAmJiB2YWwgPD0gX3RoaXMuZG90c0NvdW50IC0gMVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnRGlzdGFuY2UgPiAxMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuY3VycmVudEluZGV4IC0gMVxuICAgICAgICAgICAgICAgIGlmIChpc0JvdW5kYXJ5KG5ld0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IG5ld0luZGV4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyYWdEaXN0YW5jZSA8IC0xMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICsgMVxuICAgICAgICAgICAgICAgIGlmIChpc0JvdW5kYXJ5KG5ld0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IG5ld0luZGV4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ib3hTY3JvbGwoKVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEb3RzKClcbiAgICAgICAgfVxuICAgICAgICBzdGFydFRvdWNoID0gKGUpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIHRoaXMuZHJhZ0Rpc3RhbmNlID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYXG4gICAgICAgIH1cbiAgICAgICAgZW5kVG91Y2ggPSAoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgdGhpcy5kcmFnRGlzdGFuY2UgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLmRyYWdEaXN0YW5jZVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTbGlkZSgpXG4gICAgICAgIH1cbiAgICAgICAgaW5pdFRvdWNoU2xpZGVyID0gKHJlbW92ZSA9IHRydWUpID0+IHtcbiAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuc3RhcnRUb3VjaCwge3Bhc3NpdmU6IHRydWV9KVxuICAgICAgICAgICAgICAgIHRoaXMudG91Y2hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuZW5kVG91Y2gsIHtwYXNzaXZlOiB0cnVlfSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRvdWNoRWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuc3RhcnRUb3VjaCwge3Bhc3NpdmU6IHRydWV9KVxuICAgICAgICAgICAgdGhpcy50b3VjaEVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5lbmRUb3VjaCwge3Bhc3NpdmU6IHRydWV9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmVSZW5kZXIgPSAod2luZG93V2lkdGgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRXaWR0aCA8PSAxOTIwICYmIHdpbmRvd1dpZHRoID4gMTQ4NiAmJiB0aGlzLmN1cnJlbnRXaWR0aCAhPT0gMTkyMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gMTkyMFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5zbGlkZXJPYmpbMTkyMF1cbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTd2lwZXJTbGlkZXIoKVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFRvdWNoU2xpZGVyKClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93V2lkdGggPD0gMTQ4NiAmJiB3aW5kb3dXaWR0aCA+IDE0NDAgJiYgdGhpcy5jdXJyZW50V2lkdGggIT09IDE0ODYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRXaWR0aCA9IDE0ODZcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuc2xpZGVyT2JqWzE0ODZdXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U3dpcGVyU2xpZGVyKClcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRUb3VjaFNsaWRlcigpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvd1dpZHRoIDw9IDE0NDAgJiYgd2luZG93V2lkdGggPiAxMjAwICYmIHRoaXMuY3VycmVudFdpZHRoICE9PSAxNDQwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSAxNDQwXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnNsaWRlck9ialsxNDQwXVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN3aXBlclNsaWRlcigpXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0VG91Y2hTbGlkZXIoKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dXaWR0aCA8PSAxMjAwICYmIHdpbmRvd1dpZHRoID4gOTkyICYmIHRoaXMuY3VycmVudFdpZHRoICE9PSAxMjAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSAxMjAwXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnNsaWRlck9ialsxMjAwXVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN3aXBlclNsaWRlcigpXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0VG91Y2hTbGlkZXIoKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dXaWR0aCA8PSA5OTIgJiYgd2luZG93V2lkdGggPiA3NjggJiYgdGhpcy5jdXJyZW50V2lkdGggIT09IDk5Mikge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gOTkyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnNsaWRlck9ials5OTJdXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U3dpcGVyU2xpZGVyKClcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRUb3VjaFNsaWRlcigpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvd1dpZHRoIDw9IDc2OCAmJiB0aGlzLmN1cnJlbnRXaWR0aCAhPT0gNzY4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSA3NjhcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHRoaXMuc2xpZGVyT2JqWzc2OF1cbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTd2lwZXJTbGlkZXIoKVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFRvdWNoU2xpZGVyKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXNcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2luZG93V2lkdGggPSBOdW1iZXIod2luZG93LmlubmVyV2lkdGgpXG4gICAgICAgICAgICAgICAgX3RoaXMucmVSZW5kZXIod2luZG93V2lkdGgpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuICAgIG5ldyBWaWRlb1NsaWRlKCcjVFBNVFB4NHpHVWt0MUo0VnljbzRnZGFZMjExMjE2X2NvbnRhaW5lcicsIHtcbiAgICAgICAgc2hvd0RvdHM6IGZhbHNlXG4gICAgfSlcbn1cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgaW5pdFZpZGVvU2xpZGVFdmVudClcbi8vIHZpZGVvU2xpZGUg57uT5p2fXG4iXX0=