(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Script/BallAudioManager.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, 'bd9f78XOD5PmLTjk2rLYBiz', 'BallAudioManager'); // Script/BallAudioManager.js "use strict"; cc.Class({ "extends": cc.Component, properties: { //背景音乐 audioGameBgm0: { "default": null, type: cc.AudioClip }, // 按钮点击 audioButtonClick: { "default": null, type: cc.AudioClip }, // 报警音效 audioWarning: { "default": null, type: cc.AudioClip }, //游戏开始音效 audioWin: { "default": null, type: cc.AudioClip }, reward: false, finish: false, rewardCount: 0 }, ctor: function ctor() { this.mAudioMap = {}; /** * 默认音量大小 * @type {number} */ this.bgMusicVolume = 0.1; this.effectMusicVolume = 1; this.mMusicSwitch = 1; this.mEffectSwitch = 1; }, play: function play(audioSource, loop, callback, isBgMusic) { if (isBgMusic && !this.mMusicSwitch) return; if (!isBgMusic && !this.mEffectSwitch) return; var volume = isBgMusic ? this.bgMusicVolume : this.effectMusicVolume; if (cc.sys.isBrowser) { if (audioSource == this.brickSound) { volume = 0.1; } var context = cc.audioEngine.play(audioSource, loop, volume); if (callback) { cc.audioEngine.setFinishCallback(context, function () { callback.call(this); }.bind(this)); } // cc.wwx.OutPut.log('play audio effect isBrowser: ' + context.src); this.mAudioMap[audioSource] = context; return audioSource; } else { var context = wx.createInnerAudioContext(); context.autoplay = true; context.loop = loop; context.obeyMuteSwitch = true; context.volume = volume; if (callback) { context.onEnded(function () { callback.call(this); }.bind(this)); } else { context.offEnded(); } // var audioPath = cc.url.raw("resources/BallMaster/sounds" + audioSource.name + ".mp3"); context.src = audioSource.nativeUrl; context.play(); this.mAudioMap[audioSource] = context; // cc.wwx.OutPut.log('play audio effect wx: ' + audioSource.nativeUrl); return audioSource; } }, save: function save() {// cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Music_Volume, this.mMusicSwitch); // cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Effect_Volume, this.mEffectSwitch); }, onLoad: function onLoad() { var _this = this; // cc.wwx.Storage.getItem(cc.wwx.Storage.Key_Setting_Music_Volume, function(volume) { // this.mMusicSwitch = parseInt(volume); // }.bind(this), 1); // cc.wwx.Storage.getItem(cc.wwx.Storage.Key_Setting_Effect_Volume, function(volume) { // this.mEffectSwitch = parseInt(volume); // }.bind(this), 1); this.reward = false; this.finish = false; this.rewardCount = 0; window.addEventListener('rewardCanUse', function () { // 此时激励可用 游戏内部逻辑 _this.reward = true; }); 'undefined' != typeof window['reward'] ? window.dispatchEvent(window['reward']) : ""; this.preload(); }, preload: function preload() { if (!(cc.sys.platform === cc.sys.WECHAT_GAME)) { return; } var musics = [this.audioGameBgm0]; musics.forEach(function (path) {// var musicPath = wxDownloader.REMOTE_SERVER_ROOT + path; // if (musicPath != wxDownloader.REMOTE_SERVER_ROOT && musicPath.endsWith('.mp3')) { // cc.loader.load(musicPath, function(err, remoteUrl) { // if (err) { // cc.error(err.message || err); // return; // } // }); // } }); }, getAudioMusicSwitch: function getAudioMusicSwitch() { return this.mMusicSwitch; }, getAudioEffectSwitch: function getAudioEffectSwitch() { return this.mEffectSwitch; }, trunAudioSound: function trunAudioSound(on) { this.switchMusic(on); this.switchEffect(on); }, switchMusic: function switchMusic(on) { if (this.mMusicSwitch != (on ? 1 : 0)) { this.mMusicSwitch = 1 - this.mMusicSwitch; // this.save(); } if (on) { this.playMusicGame(); } else { this.stopMusic(); } }, switchEffect: function switchEffect(on) { if (this.mEffectSwitch != (on ? 1 : 0)) { this.mEffectSwitch = 1 - this.mEffectSwitch; // this.save(); } }, onHide: function onHide() { cc.audioEngine.pauseAll(); // if (CC_JSB) { // } else { // for (var key in this.mAudioMap) { // if (key === this.mMusicKey) { // this.mAudioMap[key].pause(); // } else { // this.mAudioMap[key].stop(); // } // } // } }, onShow: function onShow() { cc.audioEngine.resumeAll(); // if (CC_JSB) { // } else { // if (!this.mMusicSwitch) return; // var context = this.mAudioMap[this.mMusicKey]; // if (context) { // context.play(); // } // } }, playMusic: function playMusic(key, callback, loop) { loop = typeof loop == 'undefined' || loop ? true : false; this.stopMusic(); this.mMusicKey = this.play(key, loop, callback, true); }, /** * 游戏背景音乐 */ playMusicGame: function playMusicGame() { this.playMusic(this.audioGameBgm0); }, /** * 停止背景音乐播放 */ stopMusic: function stopMusic() { // cc.wwx.OutPut.log('stopMusic audio effect wx: ' + this.mMusicKey); var context = this.mAudioMap[this.mMusicKey]; if (typeof context != 'undefined') { if (cc.sys.isBrowser) { cc.audioEngine.stop(context); } else { context.stop(); } cc.audioEngine.stop(context); } }, // 炸弹、火箭爆炸音效 playBomb: function playBomb() { return this.play(this.audioBomb, false); }, //激光音效 playJiGuang: function playJiGuang() { return this.play(this.audioJiGuang, false); }, //技能音效 playItem1: function playItem1() { return this.play(this.audioItem1, false); }, /* * 游戏开始音效 * */ playGameStart: function playGameStart() { return this.play(this.audioGameStart, false); }, /* * 失败的游戏结束 */ playGameOver: function playGameOver() { return this.play(this.audioGameOver, false); }, /* * 成功的游戏结束 */ playGameResultFailed: function playGameResultFailed() { return this.play(this.audioGameResultFail, false); }, /* * 成功的游戏结束 */ playGameResultSuccess: function playGameResultSuccess() { return this.play(this.audioGameResultSuccess, false); }, /** * 报警的音效 */ playWarning: function playWarning() { return this.play(this.audioWarning, false); }, playWin: function playWin() { return this.play(this.audioWin, false); }, /* * 方块碰撞的声音 */ playBrick: function playBrick() { return this.play(this.brickSound, false); }, //方块破碎的声音 brickBoom: function brickBoom() { return this.play(this.audioObj, false); }, /** * 按钮 */ playAudioButton: function playAudioButton() { return this.play(this.audioButtonClick, false); }, playRandomMatch: function playRandomMatch() { this.playMusic(this.randomMatchSound); }, playMatchFoundSound: function playMatchFoundSound() { this.stopMusic(); return this.play(this.matchFoundSound, false); } }); cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxCYWxsQXVkaW9NYW5hZ2VyLmpzIl0sIm5hbWVzIjpbImNjIiwiQ2xhc3MiLCJDb21wb25lbnQiLCJwcm9wZXJ0aWVzIiwiYXVkaW9HYW1lQmdtMCIsInR5cGUiLCJBdWRpb0NsaXAiLCJhdWRpb0J1dHRvbkNsaWNrIiwiYXVkaW9XYXJuaW5nIiwiYXVkaW9XaW4iLCJyZXdhcmQiLCJmaW5pc2giLCJyZXdhcmRDb3VudCIsImN0b3IiLCJtQXVkaW9NYXAiLCJiZ011c2ljVm9sdW1lIiwiZWZmZWN0TXVzaWNWb2x1bWUiLCJtTXVzaWNTd2l0Y2giLCJtRWZmZWN0U3dpdGNoIiwicGxheSIsImF1ZGlvU291cmNlIiwibG9vcCIsImNhbGxiYWNrIiwiaXNCZ011c2ljIiwidm9sdW1lIiwic3lzIiwiaXNCcm93c2VyIiwiYnJpY2tTb3VuZCIsImNvbnRleHQiLCJhdWRpb0VuZ2luZSIsInNldEZpbmlzaENhbGxiYWNrIiwiY2FsbCIsImJpbmQiLCJ3eCIsImNyZWF0ZUlubmVyQXVkaW9Db250ZXh0IiwiYXV0b3BsYXkiLCJvYmV5TXV0ZVN3aXRjaCIsIm9uRW5kZWQiLCJvZmZFbmRlZCIsInNyYyIsIm5hdGl2ZVVybCIsInNhdmUiLCJvbkxvYWQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCIsInByZWxvYWQiLCJwbGF0Zm9ybSIsIldFQ0hBVF9HQU1FIiwibXVzaWNzIiwiZm9yRWFjaCIsInBhdGgiLCJnZXRBdWRpb011c2ljU3dpdGNoIiwiZ2V0QXVkaW9FZmZlY3RTd2l0Y2giLCJ0cnVuQXVkaW9Tb3VuZCIsIm9uIiwic3dpdGNoTXVzaWMiLCJzd2l0Y2hFZmZlY3QiLCJwbGF5TXVzaWNHYW1lIiwic3RvcE11c2ljIiwib25IaWRlIiwicGF1c2VBbGwiLCJvblNob3ciLCJyZXN1bWVBbGwiLCJwbGF5TXVzaWMiLCJrZXkiLCJtTXVzaWNLZXkiLCJzdG9wIiwicGxheUJvbWIiLCJhdWRpb0JvbWIiLCJwbGF5SmlHdWFuZyIsImF1ZGlvSmlHdWFuZyIsInBsYXlJdGVtMSIsImF1ZGlvSXRlbTEiLCJwbGF5R2FtZVN0YXJ0IiwiYXVkaW9HYW1lU3RhcnQiLCJwbGF5R2FtZU92ZXIiLCJhdWRpb0dhbWVPdmVyIiwicGxheUdhbWVSZXN1bHRGYWlsZWQiLCJhdWRpb0dhbWVSZXN1bHRGYWlsIiwicGxheUdhbWVSZXN1bHRTdWNjZXNzIiwiYXVkaW9HYW1lUmVzdWx0U3VjY2VzcyIsInBsYXlXYXJuaW5nIiwicGxheVdpbiIsInBsYXlCcmljayIsImJyaWNrQm9vbSIsImF1ZGlvT2JqIiwicGxheUF1ZGlvQnV0dG9uIiwicGxheVJhbmRvbU1hdGNoIiwicmFuZG9tTWF0Y2hTb3VuZCIsInBsYXlNYXRjaEZvdW5kU291bmQiLCJtYXRjaEZvdW5kU291bmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUFBLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ0wsYUFBU0QsRUFBRSxDQUFDRSxTQURQO0FBRUxDLEVBQUFBLFVBQVUsRUFBQztBQUNQO0FBQ0FDLElBQUFBLGFBQWEsRUFBQztBQUNWLGlCQUFRLElBREU7QUFFVkMsTUFBQUEsSUFBSSxFQUFDTCxFQUFFLENBQUNNO0FBRkUsS0FGUDtBQU1QO0FBQ0FDLElBQUFBLGdCQUFnQixFQUFDO0FBQ2IsaUJBQVEsSUFESztBQUViRixNQUFBQSxJQUFJLEVBQUNMLEVBQUUsQ0FBQ007QUFGSyxLQVBWO0FBV1A7QUFDQUUsSUFBQUEsWUFBWSxFQUFDO0FBQ1QsaUJBQVEsSUFEQztBQUVUSCxNQUFBQSxJQUFJLEVBQUNMLEVBQUUsQ0FBQ007QUFGQyxLQVpOO0FBaUJQO0FBQ0FHLElBQUFBLFFBQVEsRUFBQztBQUNMLGlCQUFRLElBREg7QUFFTEosTUFBQUEsSUFBSSxFQUFDTCxFQUFFLENBQUNNO0FBRkgsS0FsQkY7QUF1QlBJLElBQUFBLE1BQU0sRUFBRSxLQXZCRDtBQXdCUEMsSUFBQUEsTUFBTSxFQUFFLEtBeEJEO0FBeUJQQyxJQUFBQSxXQUFX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TDtBQUNKO0FBQ0E7QUFDSUMsRUFBQUEscUJBN1FLLG1DQThRTDtBQUNJLFdBQU8sS0FBSzdELElBQUwsQ0FBVSxLQUFLOEQsc0JBQWYsRUFBc0MsS0FBdEMsQ0FBUDtBQUNILEdBaFJJOztBQWlSTDtBQUNKO0FBQ0E7QUFDSUMsRUFBQUEsV0FwUksseUJBcVJMO0FBQ0ksV0FBTyxLQUFLL0QsSUFBTCxDQUFVLEtBQUtYLFlBQWYsRUFBNEIsS0FBNUIsQ0FBUDtBQUVILEdBeFJJO0FBMFJMMkUsRUFBQUEsT0ExUksscUJBMlJMO0FBQ0ksV0FBTyxLQUFLaEUsSUFBTCxDQUFVLEtBQUtWLFFBQWYsRUFBd0IsS0FBeEIsQ0FBUDtBQUNILEdBN1JJOztBQStSTDtBQUNKO0FBQ0E7QUFDSTJFLEVBQUFBLFNBbFNLLHVCQW1TTDtBQUNJLFdBQU8sS0FBS2pFLElBQUwsQ0FBVSxLQUFLUSxVQUFmLEVBQTBCLEtBQTFCLENBQVA7QUFDSCxHQXJTSTtBQXNTTDtBQUNBMEQsRUFBQUEsU0F2U0ssdUJBdVNNO0FBQ1AsV0FBTyxLQUFLbEUsSUFBTCxDQUFVLEtBQUttRSxRQUFmLEVBQXdCLEtBQXhCLENBQVA7QUFDSCxHQXpTSTs7QUEwU0w7QUFDSjtBQUNBO0FBQ0lDLEVBQUFBLGVBN1NLLDZCQTZTYztBQUNmLFdBQU8sS0FBS3BFLElBQUwsQ0FBVSxLQUFLWixnQkFBZixFQUFpQyxLQUFqQyxDQUFQO0FBQ0gsR0EvU0k7QUFpVExpRixFQUFBQSxlQWpUSyw2QkFrVEw7QUFDSSxTQUFLeEIsU0FBTCxDQUFlLEtBQUt5QixnQkFBcEI7QUFDSCxHQXBUSTtBQXFUTEMsRUFBQUEsbUJBclRLLGlDQXNUTDtBQUNJLFNBQUsvQixTQUFMO0FBQ0EsV0FBTyxLQUFLeEMsSUFBTCxDQUFVLEtBQUt3RSxlQUFmLEVBQWdDLEtBQWhDLENBQVA7QUFDSDtBQXpUSSxDQUFUIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogY2MuQ29tcG9uZW50LFxuICAgIHByb3BlcnRpZXM6e1xuICAgICAgICAvL+iDjOaZr+mfs+S5kFxuICAgICAgICBhdWRpb0dhbWVCZ20wOntcbiAgICAgICAgICAgIGRlZmF1bHQ6bnVsbCxcbiAgICAgICAgICAgIHR5cGU6Y2MuQXVkaW9DbGlwXG4gICAgICAgIH0sXG4gICAgICAgIC8vIOaMiemSrueCueWHu1xuICAgICAgICBhdWRpb0J1dHRvbkNsaWNrOntcbiAgICAgICAgICAgIGRlZmF1bHQ6bnVsbCxcbiAgICAgICAgICAgIHR5cGU6Y2MuQXVkaW9DbGlwXG4gICAgICAgIH0sXG4gICAgICAgIC8vIOaKpeitpumfs+aViFxuICAgICAgICBhdWRpb1dhcm5pbmc6e1xuICAgICAgICAgICAgZGVmYXVsdDpudWxsLFxuICAgICAgICAgICAgdHlwZTpjYy5BdWRpb0NsaXBcbiAgICAgICAgfSxcblxuICAgICAgICAvL+a4uOaIj+W8gOWni+mfs+aViFxuICAgICAgICBhdWRpb1dpbjp7XG4gICAgICAgICAgICBkZWZhdWx0Om51bGwsXG4gICAgICAgICAgICB0eXBlOmNjLkF1ZGlvQ2xpcFxuICAgICAgICB9LFxuXG4gICAgICAgIHJld2FyZDogZmFsc2UsXG4gICAgICAgIGZpbmlzaDogZmFsc2UsXG4gICAgICAgIHJld2FyZENvdW50OiAwXG5cbiAgICB9LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tQXVkaW9NYXAgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICog6buY6K6k6Z+z6YeP5aSn5bCPXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJnTXVzaWNWb2x1bWUgPSAwLjE7XG4gICAgICAgIHRoaXMuZWZmZWN0TXVzaWNWb2x1bWUgPSAxO1xuXG4gICAgICAgIHRoaXMubU11c2ljU3dpdGNoID0gMTtcbiAgICAgICAgdGhpcy5tRWZmZWN0U3dpdGNoID0gMTtcbiAgICB9LFxuICAgIHBsYXkgOiBmdW5jdGlvbihhdWRpb1NvdXJjZSwgbG9vcCwgY2FsbGJhY2ssIGlzQmdNdXNpYykge1xuICAgICAgICBpZiAoaXNCZ011c2ljICYmICF0aGlzLm1NdXNpY1N3aXRjaCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWlzQmdNdXNpYyAmJiAhdGhpcy5tRWZmZWN0U3dpdGNoKSByZXR1cm47XG5cbiAgICAgICAgdmFyIHZvbHVtZSA9IGlzQmdNdXNpYyA/IHRoaXMuYmdNdXNpY1ZvbHVtZSA6IHRoaXMuZWZmZWN0TXVzaWNWb2x1bWU7XG5cbiAgICAgICAgaWYgKGNjLnN5cy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIGlmKGF1ZGlvU291cmNlID09IHRoaXMuYnJpY2tTb3VuZCl7XG4gICAgICAgICAgICAgICAgdm9sdW1lID0gMC4xO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY2MuYXVkaW9FbmdpbmUucGxheShhdWRpb1NvdXJjZSwgbG9vcCwgdm9sdW1lKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUuc2V0RmluaXNoQ2FsbGJhY2soY29udGV4dCwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2Mud3d4Lk91dFB1dC5sb2coJ3BsYXkgYXVkaW8gZWZmZWN0IGlzQnJvd3NlcjogJyArIGNvbnRleHQuc3JjKTtcblxuICAgICAgICAgICAgdGhpcy5tQXVkaW9NYXBbYXVkaW9Tb3VyY2VdID0gY29udGV4dDtcbiAgICAgICAgICAgIHJldHVybiBhdWRpb1NvdXJjZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gd3guY3JlYXRlSW5uZXJBdWRpb0NvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnRleHQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29udGV4dC5sb29wID0gbG9vcDtcbiAgICAgICAgICAgIGNvbnRleHQub2JleU11dGVTd2l0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgY29udGV4dC52b2x1bWUgPSB2b2x1bWU7XG5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQub25FbmRlZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm9mZkVuZGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gdmFyIGF1ZGlvUGF0aCA9IGNjLnVybC5yYXcoXCJyZXNvdXJjZXMvQmFsbE1hc3Rlci9zb3VuZHNcIiArIGF1ZGlvU291cmNlLm5hbWUgKyBcIi5tcDNcIik7XG4gICAgICAgICAgICBjb250ZXh0LnNyYyA9IGF1ZGlvU291cmNlLm5hdGl2ZVVybDtcbiAgICAgICAgICAgIGNvbnRleHQucGxheSgpXG4gICAgICAgICAgICB0aGlzLm1BdWRpb01hcFthdWRpb1NvdXJjZV0gPSBjb250ZXh0O1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIGNjLnd3eC5PdXRQdXQubG9nKCdwbGF5IGF1ZGlvIGVmZmVjdCB3eDogJyArIGF1ZGlvU291cmNlLm5hdGl2ZVVybCk7XG4gICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGF1ZGlvU291cmNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNhdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2Uuc2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19NdXNpY19Wb2x1bWUsIHRoaXMubU11c2ljU3dpdGNoKTtcbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2Uuc2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19FZmZlY3RfVm9sdW1lLCB0aGlzLm1FZmZlY3RTd2l0Y2gpO1xuICAgIH0sXG4gICAgb25Mb2FkKCkge1xuICAgICAgICAvLyBjYy53d3guU3RvcmFnZS5nZXRJdGVtKGNjLnd3eC5TdG9yYWdlLktleV9TZXR0aW5nX011c2ljX1ZvbHVtZSwgZnVuY3Rpb24odm9sdW1lKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1NdXNpY1N3aXRjaCA9IHBhcnNlSW50KHZvbHVtZSk7XG4gICAgICAgIC8vIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2UuZ2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19FZmZlY3RfVm9sdW1lLCBmdW5jdGlvbih2b2x1bWUpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubUVmZmVjdFN3aXRjaCA9IHBhcnNlSW50KHZvbHVtZSk7XG4gICAgICAgIC8vIH0uYmluZCh0aGlzKSwgMSk7XG5cblxuICAgICAgICB0aGlzLnJld2FyZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbmlzaCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJld2FyZENvdW50ID0gMDtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jld2FyZENhblVzZScsICgpID0+IHtcbiAgICAgICAgICAgIC8vIOatpOaXtua/gOWKseWPr+eUqCDmuLjmiI/lhoXpg6jpgLvovpFcbiAgICAgICAgICAgIHRoaXMucmV3YXJkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIHdpbmRvd1sncmV3YXJkJ10gPyBcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQod2luZG93WydyZXdhcmQnXSk6XCJcIlxuXG4gICAgICAgIHRoaXMucHJlbG9hZCgpO1xuICAgIH0sXG4gICAgcHJlbG9hZCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIShjYy5zeXMucGxhdGZvcm0gPT09IGNjLnN5cy5XRUNIQVRfR0FNRSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdmFyIG11c2ljcyA9IFtcbiAgICAgICAgICAgIHRoaXMuYXVkaW9HYW1lQmdtMCxcbiAgICAgICAgXTtcbiAgICAgICAgbXVzaWNzLmZvckVhY2goZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgLy8gdmFyIG11c2ljUGF0aCA9IHd4RG93bmxvYWRlci5SRU1PVEVfU0VSVkVSX1JPT1QgKyBwYXRoO1xuICAgICAgICAgICAgLy8gaWYgKG11c2ljUGF0aCAhPSB3eERvd25sb2FkZXIuUkVNT1RFX1NFUlZFUl9ST09UICYmIG11c2ljUGF0aC5lbmRzV2l0aCgnLm1wMycpKSB7XG4gICAgICAgICAgICAvLyAgICAgY2MubG9hZGVyLmxvYWQobXVzaWNQYXRoLCBmdW5jdGlvbihlcnIsIHJlbW90ZVVybCkge1xuICAgICAgICAgICAgLy8gICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYy5lcnJvcihlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldEF1ZGlvTXVzaWNTd2l0Y2goKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubU11c2ljU3dpdGNoO1xuXG4gICAgfSxcbiAgICBnZXRBdWRpb0VmZmVjdFN3aXRjaCgpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5tRWZmZWN0U3dpdGNoO1xuICAgIH0sXG4gICAgdHJ1bkF1ZGlvU291bmQob24pXG4gICAge1xuICAgICAgICB0aGlzLnN3aXRjaE11c2ljKG9uKTtcbiAgICAgICAgdGhpcy5zd2l0Y2hFZmZlY3Qob24pXG4gICAgfSxcbiAgICBzd2l0Y2hNdXNpYyA6IGZ1bmN0aW9uKG9uKSB7XG4gICAgICAgIGlmICh0aGlzLm1NdXNpY1N3aXRjaCAhPSAob24/MTowKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5tTXVzaWNTd2l0Y2ggPSAxLXRoaXMubU11c2ljU3dpdGNoO1xuICAgICAgICAgICAgLy8gdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICBpZihvbilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbGF5TXVzaWNHYW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzd2l0Y2hFZmZlY3QgOiBmdW5jdGlvbihvbikge1xuICAgICAgICBpZiAodGhpcy5tRWZmZWN0U3dpdGNoICE9IChvbj8xOjApKXtcbiAgICAgICAgICAgIHRoaXMubUVmZmVjdFN3aXRjaCA9IDEtdGhpcy5tRWZmZWN0U3dpdGNoO1xuICAgICAgICAgICAgLy8gdGhpcy5zYXZlKCk7XG5cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb25IaWRlICgpIHtcbiAgICAgICAgY2MuYXVkaW9FbmdpbmUucGF1c2VBbGwoKTtcblxuICAgICAgICAvLyBpZiAoQ0NfSlNCKSB7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5tQXVkaW9NYXApIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAoa2V5ID09PSB0aGlzLm1NdXNpY0tleSkge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1BdWRpb01hcFtrZXldLnBhdXNlKCk7XG4gICAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tQXVkaW9NYXBba2V5XS5zdG9wKCk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgfSxcblxuICAgIG9uU2hvdyAoKSB7XG4gICAgICAgIGNjLmF1ZGlvRW5naW5lLnJlc3VtZUFsbCgpO1xuXG4gICAgICAgIC8vIGlmIChDQ19KU0IpIHtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIGlmICghdGhpcy5tTXVzaWNTd2l0Y2gpIHJldHVybjtcbiAgICAgICAgLy8gICAgIHZhciBjb250ZXh0ID0gdGhpcy5tQXVkaW9NYXBbdGhpcy5tTXVzaWNLZXldO1xuICAgICAgICAvLyAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgLy8gICAgICAgICBjb250ZXh0LnBsYXkoKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH0sXG4gICAgcGxheU11c2ljIDogZnVuY3Rpb24oa2V5LCBjYWxsYmFjaywgbG9vcCkge1xuXG4gICAgICAgIGxvb3AgPSB0eXBlb2YgbG9vcCA9PSAndW5kZWZpbmVkJyAgfHwgbG9vcCA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgICB0aGlzLm1NdXNpY0tleSA9IHRoaXMucGxheShrZXksIGxvb3AsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOa4uOaIj+iDjOaZr+mfs+S5kFxuICAgICAqL1xuICAgIHBsYXlNdXNpY0dhbWUgKCkge1xuICAgICAgICB0aGlzLnBsYXlNdXNpYyh0aGlzLmF1ZGlvR2FtZUJnbTApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICog5YGc5q2i6IOM5pmv6Z+z5LmQ5pKt5pS+XG4gICAgICovXG4gICAgc3RvcE11c2ljICgpIHtcbiAgICAgICAgLy8gY2Mud3d4Lk91dFB1dC5sb2coJ3N0b3BNdXNpYyBhdWRpbyBlZmZlY3Qgd3g6ICcgKyB0aGlzLm1NdXNpY0tleSk7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLm1BdWRpb01hcFt0aGlzLm1NdXNpY0tleV07XG5cbiAgICAgICAgaWYgKHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKGNjLnN5cy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgICAgICBjYy5hdWRpb0VuZ2luZS5zdG9wKGNvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNjLmF1ZGlvRW5naW5lLnN0b3AoY29udGV4dCk7XG5cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8g54K45by544CB54Gr566t54iG54K46Z+z5pWIXG4gICAgcGxheUJvbWIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9Cb21iLCBmYWxzZSk7XG4gICAgfSxcbiAgICAvL+a/gOWFiemfs+aViFxuICAgIHBsYXlKaUd1YW5nKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0ppR3VhbmcsIGZhbHNlKTtcbiAgICB9LFxuICAgIC8v5oqA6IO96Z+z5pWIXG4gICAgcGxheUl0ZW0xKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0l0ZW0xLCBmYWxzZSk7XG4gICAgfSxcbiAgICAvKlxuICAgICAqIOa4uOaIj+W8gOWni+mfs+aViFxuICAgICAqXG4gICAgICovXG4gICAgIHBsYXlHYW1lU3RhcnQoKVxuICAgICB7XG4gICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9HYW1lU3RhcnQsIGZhbHNlKTtcbiAgICAgfSxcbiAgICAgLypcbiAgICAgICog5aSx6LSl55qE5ri45oiP57uT5p2fXG4gICAgICAqL1xuICAgICBwbGF5R2FtZU92ZXIoKVxuICAgICB7XG4gICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9HYW1lT3ZlcixmYWxzZSk7XG4gICAgIH0sXG4gICAgLypcbiAgICAgICog5oiQ5Yqf55qE5ri45oiP57uT5p2fXG4gICAgICAqL1xuICAgIHBsYXlHYW1lUmVzdWx0RmFpbGVkKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0dhbWVSZXN1bHRGYWlsLGZhbHNlKTtcbiAgICB9LFxuICAgIC8qXG4gICog5oiQ5Yqf55qE5ri45oiP57uT5p2fXG4gICovXG4gICAgcGxheUdhbWVSZXN1bHRTdWNjZXNzKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0dhbWVSZXN1bHRTdWNjZXNzLGZhbHNlKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOaKpeitpueahOmfs+aViFxuICAgICAqL1xuICAgIHBsYXlXYXJuaW5nKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb1dhcm5pbmcsZmFsc2UpO1xuXG4gICAgfSxcblxuICAgIHBsYXlXaW4oKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvV2luLGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiDmlrnlnZfnorDmkp7nmoTlo7Dpn7NcbiAgICAgKi9cbiAgICBwbGF5QnJpY2soKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmJyaWNrU291bmQsZmFsc2UpO1xuICAgIH0sXG4gICAgLy/mlrnlnZfnoLTnoo7nmoTlo7Dpn7NcbiAgICBicmlja0Jvb20oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvT2JqLGZhbHNlKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOaMiemSrlxuICAgICAqL1xuICAgIHBsYXlBdWRpb0J1dHRvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0J1dHRvbkNsaWNrLCBmYWxzZSk7XG4gICAgfSxcblxuICAgIHBsYXlSYW5kb21NYXRjaCgpXG4gICAge1xuICAgICAgICB0aGlzLnBsYXlNdXNpYyh0aGlzLnJhbmRvbU1hdGNoU291bmQpO1xuICAgIH0sXG4gICAgcGxheU1hdGNoRm91bmRTb3VuZCgpXG4gICAge1xuICAgICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMubWF0Y2hGb3VuZFNvdW5kLCBmYWxzZSk7XG4gICAgfVxufSk7Il19