"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ytdl_core_1 = __importDefault(require("ytdl-core")); const discord_js_commando_1 = require("discord.js-commando"); const discord_js_1 = require("discord.js"); const simple_youtube_api_1 = __importDefault(require("simple-youtube-api")); const config_json_1 = __importDefault(require("../../config.json")); const youtube = new simple_youtube_api_1.default(config_json_1.default['yt-api-key']); const emoji_random_1 = __importDefault(require("emoji-random")); module.exports = class MinecraftVoice extends discord_js_commando_1.Command { constructor(client) { super(client, { name: 'minecraft', aliases: ['minecraftsountrack', 'minecraft-soundtrack', 'mcs', 'mc-s'], group: 'voice', memberName: 'minecraft', description: 'Plays the Minecraft soundtrack.', guildOnly: true, clientPermissions: ['SPEAK', 'CONNECT', 'SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], userPermissions: ['SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], examples: [ 'uwu!minecraft', 'uwu!minecraftsountrack', 'uwu!minecraft-soundtrack', 'uwu!mcs', 'uwu!mc-s' ] }); } run(msg) { return __awaiter(this, void 0, void 0, function* () { const voiceChannel = msg.member.voice.channel; if (!voiceChannel) return msg.say('Please join a channel and try again. ' + emoji_random_1.default.random()); const playlist = yield youtube.getPlaylist('https://www.youtube.com/watch?v=05UM-i4PuOY&list=PLxOTV5xn7n1i2HcKtRBthP2loWjrBGAIY').catch(function () { return msg.say('There was a problem getting the soundtrack. ' + emoji_random_1.default.random()); }); const videosObj = yield playlist.getVideos(24).catch(function () { return msg.say('There was a problem getting the soundtrack. ' + emoji_random_1.default.random()); }); for (let i = 0; i < videosObj.length; i++) { const video = yield videosObj[i].fetch(); msg.guild.musicData.queue.push(this.constructSongObj(video, voiceChannel)); } if (msg.guild.musicData.isPlaying == false) { msg.guild.musicData.isPlaying = true; return this.playSong(msg.guild.musicData.queue, msg); } else if (msg.guild.musicData.isPlaying == true) { return msg.say('Now playing the Minecraft soundtrack. ' + emoji_random_1.default.random()); } var that = this; msg.channel .awaitMessages(function (msg) { return (msg.content > 0 && msg.content < 6) || msg.content === 'exit'; }, { max: 1, time: 60000, errors: ['time'] }) .then(function (response) { const videoIndex = parseInt(response.first().content); if (response.first().content === 'exit') return songEmbed.delete(); youtube .getVideoByID(videos[videoIndex - 1].id) .then(function (video) { msg.guild.musicData.queue.push(that.constructSongObj(video, voiceChannel)); if (msg.guild.musicData.isPlaying == false) { msg.guild.musicData.isPlaying = true; if (songEmbed) { songEmbed.delete(); } that.playSong(msg.guild.musicData.queue, msg); } else if (msg.guild.musicData.isPlaying == true) { if (songEmbed) { songEmbed.delete(); } return msg.say('Now playing the Minecraft soundtrack. ' + emoji_random_1.default.random()); } }) .catch(function () { if (songEmbed) { songEmbed.delete(); } return msg.say('An error has occured when trying to get the video ID from YouTube. ' + emoji_random_1.default.random()); }); }); }); } playSong(queue, msg) { const classThis = this; queue[0].voiceChannel .join() .then(function (connection) { const dispatcher = connection .play(ytdl_core_1.default(queue[0].url, { quality: 'highestaudio', highWaterMark: 1024 * 1024 * 10 })) .on('start', function () { msg.guild.musicData.songDispatcher = dispatcher; const volume = 100 / 100; msg.guild.musicData.volume = volume; dispatcher.setVolume(msg.guild.musicData.volume); const videoEmbed = new discord_js_1.MessageEmbed() .setThumbnail(queue[0].thumbnail) .setColor(0xFFCC4D) .addField('Now Playing:', queue[0].title) .addField('Duration:', queue[0].duration); if (queue[1]) videoEmbed.addField('Next Song:', queue[1].title); msg.say(videoEmbed); msg.guild.musicData.nowPlaying = queue[0]; return queue.shift(); }) .on('finish', function () { if (queue.length >= 1) { return classThis.playSong(queue, msg); } else { msg.guild.musicData.isPlaying = false; msg.guild.musicData.nowPlaying = null; msg.guild.musicData.songDispatcher = null; return msg.guild.me.voice.channel.leave(); } }) .on('error', function (e) { msg.say('Can\'t play soundtrack. ' + emoji_random_1.default.random()); console.error(e); msg.guild.musicData.queue.length = 0; msg.guild.musicData.isPlaying = false; msg.guild.musicData.nowPlaying = null; msg.guild.musicData.songDispatcher = null; return msg.guild.me.voice.channel.leave(); }); }) .catch(function (e) { console.error(e); return msg.guild.me.voice.channel.leave(); }); } constructSongObj(video, voiceChannel) { let duration = this.formatDuration(video.duration); if (duration == '00:00') duration = 'Live Stream'; return { url: `https://www.youtube.com/watch?v=${video.raw.id}`, title: video.title, duration, thumbnail: video.thumbnails.high.url, voiceChannel }; } formatDuration(durationObj) { const duration = `${durationObj.hours ? (durationObj.hours + ':') : ''}${durationObj.minutes ? durationObj.minutes : '00'}:${(durationObj.seconds < 10) ? ('0' + durationObj.seconds) : (durationObj.seconds ? durationObj.seconds : '00')}`; return duration; } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluZWNyYWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3ZvaWNlL21pbmVjcmFmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUE2QjtBQUM3Qiw2REFBK0Q7QUFDL0QsMkNBQTBDO0FBQzFDLDRFQUF5QztBQUV6QyxvRUFBdUM7QUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSw0QkFBTyxDQUFDLHFCQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnRUFBaUM7QUFFakMsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLGNBQWUsU0FBUSw2QkFBTztJQUNqRCxZQUFZLE1BQU07UUFDZCxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ1YsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztZQUN0RSxLQUFLLEVBQUUsT0FBTztZQUNkLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLFdBQVcsRUFBRSxpQ0FBaUM7WUFDOUMsU0FBUyxFQUFFLElBQUk7WUFDZixpQkFBaUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixDQUFDO1lBQ2hGLGVBQWUsRUFBRSxDQUFDLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQztZQUMxRCxRQUFRLEVBQUU7Z0JBQ04sZUFBZTtnQkFDZix3QkFBd0I7Z0JBQ3hCLDBCQUEwQjtnQkFDMUIsU0FBUztnQkFDVCxVQUFVO2FBQ2I7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0ssR0FBRyxDQUFDLEdBQW9COztZQUMxQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVk7Z0JBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxHQUFHLHNCQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUU1RixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMscUZBQXFGLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsR0FBRyxzQkFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDcEYsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNqRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQ1YsOENBQThDLEdBQUcsc0JBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDbEUsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUl6QyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUM3QyxDQUFDO2FBTUw7WUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxLQUFLLEVBQUU7Z0JBQ3hDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEQ7aUJBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO2dCQUM5QyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQ1Ysd0NBQXdDLEdBQUcsc0JBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDNUQsQ0FBQzthQUNMO1lBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxPQUFPO2lCQUNOLGFBQWEsQ0FDVixVQUFVLEdBQUc7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUM7WUFDMUUsQ0FBQyxFQUFFO2dCQUNDLEdBQUcsRUFBRSxDQUFDO2dCQUNOLElBQUksRUFBRSxLQUFLO2dCQUNYLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUNuQixDQUNKO2lCQUNBLElBQUksQ0FBQyxVQUFVLFFBQVE7Z0JBQ3BCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNO29CQUFFLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuRSxPQUFPO3FCQUNGLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDdkMsSUFBSSxDQUFDLFVBQVUsS0FBSztvQkFvQmpCLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQzdDLENBQUM7b0JBQ0YsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFO3dCQUN4QyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO3dCQUNyQyxJQUFJLFNBQVMsRUFBRTs0QkFDWCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7eUJBQ3RCO3dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUNqRDt5QkFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7d0JBQzlDLElBQUksU0FBUyxFQUFFOzRCQUNYLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt5QkFDdEI7d0JBQ0QsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxHQUFHLHNCQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztxQkFDN0U7Z0JBQ0wsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQztvQkFDSCxJQUFJLFNBQVMsRUFBRTt3QkFDWCxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7cUJBQ3RCO29CQUNELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FDVixxRUFBcUUsR0FBRyxzQkFBSyxDQUFDLE1BQU0sRUFBRSxDQUN6RixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDO0tBQUE7SUFDRCxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQW9CO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztRQUN2QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWTthQUNoQixJQUFJLEVBQUU7YUFDTixJQUFJLENBQUMsVUFBVSxVQUFVO1lBQ3RCLE1BQU0sVUFBVSxHQUFHLFVBQVU7aUJBQ3hCLElBQUksQ0FDRCxtQkFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLGFBQWEsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7YUFDbEMsQ0FBQyxDQUNMO2lCQUNBLEVBQUUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQztnQkFDaEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztnQkFDekIsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDcEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSx5QkFBWSxFQUFFO3FCQUNoQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztxQkFDaEMsUUFBUSxDQUFDLFFBQVEsQ0FBQztxQkFDbEIsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3FCQUN4QyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDO2lCQUNELEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ1YsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDbkIsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDekM7cUJBQU07b0JBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDdEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDdEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDMUMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUM3QztZQUNMLENBQUMsQ0FBQztpQkFDRCxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxzQkFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN0QyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFlBQVk7UUFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxRQUFRLElBQUksT0FBTztZQUFFLFFBQVEsR0FBRyxhQUFhLENBQUM7UUFDbEQsT0FBTztZQUNILEdBQUcsRUFBRSxtQ0FBbUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLFFBQVE7WUFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNwQyxZQUFZO1NBQ2YsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsV0FBVztRQUN0QixNQUFNLFFBQVEsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUN4RSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUM5QyxJQUNFLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU87Z0JBQ3RCLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTztnQkFDckIsQ0FBQyxDQUFDLElBQUksQ0FDVixFQUFFLENBQUM7UUFDQyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0osQ0FBQyJ9