From d76a43a50d2fb6f04401d5308f46487c40b78276 Mon Sep 17 00:00:00 2001 From: Parker2991 Date: Tue, 20 Feb 2024 17:12:40 +0000 Subject: [PATCH] v4.2.3 --- .gitignore | 6 + ChomensJS/README.md | 11 + ChomensJS/bot.js | 128 + ChomensJS/commands/botuser.js | 18 + ChomensJS/commands/botvisibility.js | 63 + ChomensJS/commands/bruhify.js | 19 + ChomensJS/commands/cb.js | 13 + ChomensJS/commands/clearchat.js | 22 + ChomensJS/commands/clearchatqueue.js | 19 + ChomensJS/commands/cloop.js | 102 + ChomensJS/commands/cowsay.js | 43 + ChomensJS/commands/creator.js | 18 + ChomensJS/commands/discord.js | 23 + ChomensJS/commands/draw.js | 41 + ChomensJS/commands/echo.js | 13 + ChomensJS/commands/end.js | 13 + ChomensJS/commands/eval.js | 60 + ChomensJS/commands/help.js | 152 + ChomensJS/commands/list.js | 76 + ChomensJS/commands/music.js | 369 + ChomensJS/commands/netmsg.js | 50 + ChomensJS/commands/refillcore.js | 13 + ChomensJS/commands/rtp.js | 13 + ChomensJS/commands/servereval.js | 33 + ChomensJS/commands/serverinfo.js | 66 + ChomensJS/commands/test.js | 35 + ChomensJS/commands/time.js | 37 + ChomensJS/commands/tpsbar.js | 63 + ChomensJS/commands/translate.js | 33 + ChomensJS/commands/uptime.js | 23 + ChomensJS/commands/urban.js | 19 + ChomensJS/commands/uuid.js | 84 + ChomensJS/commands/validate.js | 14 + ChomensJS/commands/wikipedia.js | 36 + ChomensJS/config.js | 124 + ChomensJS/default.js | 77 + ChomensJS/index.js | 48 + ChomensJS/midis/Manifest.midi | Bin 0 -> 158804 bytes ChomensJS/midis/NightOfNights.mid | Bin 0 -> 679624 bytes ChomensJS/plugins/bruhify.js | 26 + ChomensJS/plugins/chat.js | 76 + ChomensJS/plugins/cloop.js | 25 + ChomensJS/plugins/commands.js | 123 + ChomensJS/plugins/console.js | 107 + ChomensJS/plugins/core.js | 115 + ChomensJS/plugins/discord.js | 178 + ChomensJS/plugins/draw.js | 53 + ChomensJS/plugins/hash.js | 18 + ChomensJS/plugins/music.js | 190 + ChomensJS/plugins/players.js | 136 + ChomensJS/plugins/position.js | 11 + ChomensJS/plugins/proxy.js | 129 + ChomensJS/plugins/proxy/chat.js | 16 + ChomensJS/plugins/proxy/custom_chat.js | 58 + ChomensJS/plugins/proxy/self_care.js | 48 + ChomensJS/plugins/self_care.js | 90 + ChomensJS/plugins/tellraw.js | 12 + ChomensJS/plugins/tps.js | 75 + ChomensJS/plugins/vm.js | 46 + ChomensJS/replit_zip_error_log.txt | 1 + ChomensJS/util/between.js | 13 + ChomensJS/util/chat.js | 146 + ChomensJS/util/clamp.js | 6 + ChomensJS/util/colors/minecraft.js | 23 + ChomensJS/util/containsIllegalCharacters.js | 18 + ChomensJS/util/escapeMarkdown.js | 22 + ChomensJS/util/file-exists.js | 19 + ChomensJS/util/file-list.js | 18 + ChomensJS/util/getFilenameFromUrl.js | 14 + ChomensJS/util/image.js | 27 + ChomensJS/util/loadPlugins.js | 33 + ChomensJS/util/load_files.js | 25 + ChomensJS/util/midi_converter/convert_note.js | 39 + .../util/midi_converter/instrument_map.js | 153 + .../util/midi_converter/instruments.json | 82 + ChomensJS/util/midi_converter/main.js | 37 + ChomensJS/util/midi_converter/package.json | 3 + .../util/midi_converter/percussion_map.js | 58 + ChomensJS/util/minecraftVersionToNumber.js | 13 + ChomensJS/util/nbs_converter.js | 65 + ChomensJS/util/nbs_file.js | 157 + ChomensJS/util/txt_song_parser.js | 15 + CommandModules/command_error.js | 17 + CommandModules/command_source.js | 17 + README.md | 1 + bot.js | 72 + chat/chipmunkmod.js | 28 + chat/chipmunkmodBlackilyKatVer.js | 27 + chat/kaboom.js | 41 + commands/botdevhistory.js | 13 + commands/bots.js | 205 + commands/cai.js | 67 + commands/calculator.js | 72 + commands/changelog.js | 358 + commands/chatterboxbot.js | 252 + commands/ckill.js | 28 + commands/cloop.js | 81 + commands/cloopcrash.js | 20 + commands/consoleserver.js | 35 + commands/core.js | 15 + commands/cowsay.js | 72 + commands/crash.js | 19 + commands/discordmsg.js | 12 + commands/echo.js | 14 + commands/errortest.js | 12 + commands/evaljs.js | 109 + commands/fard.js | 13 + commands/filedirectories.js | 86 + commands/filter.js | 15 + commands/freeze.js | 31 + commands/help.js | 160 + commands/icu.js | 29 + commands/info.js | 162 + commands/kick.js | 39 + commands/list.js | 35 + commands/lol.js | 12 + commands/mineflayerbot.js | 90 + commands/netmsg.js | 24 + commands/ping.js | 19 + commands/rc.js | 10 + commands/reconnect.js | 19 + commands/say.js | 35 + commands/selfdestruct.js | 57 + commands/skin.js | 16 + commands/spambot.js | 29 + commands/sudo.js | 16 + commands/test.js | 18 + commands/testbench.js | 29 + commands/tpr.js | 19 + commands/troll.js | 56 + commands/urban.js | 30 + commands/validate.js | 12 + commands/wiki.js | 21 + config.json | 83 + default.json | 24 + e. | 0 e.env | 0 e.nv | 0 e.txt | 144 + index.js | 26 + lolus.json | 5434 ++++++++++++ modules/chat.js | 125 + modules/chat_command_handler.js | 35 + modules/command_core.js | 75 + modules/command_loop_manager.js | 21 + modules/command_manager.js | 92 + modules/console.js | 53 + modules/discord.js | 202 + modules/hashing.js | 30 + modules/player_list.js | 89 + modules/position.js | 19 + modules/reconnect.js | 16 + modules/registry.js | 11 + modules/selfcare.js | 97 + modules/startup.js | 14 + package-lock.json | 7427 +++++++++++++++++ package.json | 39 + shutdown.js | 0 util/between.js | 7 + util/blacklist util/auto_deop.js | 0 util/blacklist util/auto_mute.js | 0 util/blacklist util/list.txt | 0 util/escapeMarkdown.js | 16 + util/eval_colors.js | 22 + util/file-exists.js | 19 + util/files.js | 44 + 166 files changed, 21329 insertions(+) create mode 100644 .gitignore create mode 100644 ChomensJS/README.md create mode 100644 ChomensJS/bot.js create mode 100644 ChomensJS/commands/botuser.js create mode 100644 ChomensJS/commands/botvisibility.js create mode 100644 ChomensJS/commands/bruhify.js create mode 100644 ChomensJS/commands/cb.js create mode 100644 ChomensJS/commands/clearchat.js create mode 100644 ChomensJS/commands/clearchatqueue.js create mode 100644 ChomensJS/commands/cloop.js create mode 100644 ChomensJS/commands/cowsay.js create mode 100644 ChomensJS/commands/creator.js create mode 100644 ChomensJS/commands/discord.js create mode 100644 ChomensJS/commands/draw.js create mode 100644 ChomensJS/commands/echo.js create mode 100644 ChomensJS/commands/end.js create mode 100644 ChomensJS/commands/eval.js create mode 100644 ChomensJS/commands/help.js create mode 100644 ChomensJS/commands/list.js create mode 100644 ChomensJS/commands/music.js create mode 100644 ChomensJS/commands/netmsg.js create mode 100644 ChomensJS/commands/refillcore.js create mode 100644 ChomensJS/commands/rtp.js create mode 100644 ChomensJS/commands/servereval.js create mode 100644 ChomensJS/commands/serverinfo.js create mode 100644 ChomensJS/commands/test.js create mode 100644 ChomensJS/commands/time.js create mode 100644 ChomensJS/commands/tpsbar.js create mode 100644 ChomensJS/commands/translate.js create mode 100644 ChomensJS/commands/uptime.js create mode 100644 ChomensJS/commands/urban.js create mode 100644 ChomensJS/commands/uuid.js create mode 100644 ChomensJS/commands/validate.js create mode 100644 ChomensJS/commands/wikipedia.js create mode 100644 ChomensJS/config.js create mode 100644 ChomensJS/default.js create mode 100644 ChomensJS/index.js create mode 100644 ChomensJS/midis/Manifest.midi create mode 100644 ChomensJS/midis/NightOfNights.mid create mode 100644 ChomensJS/plugins/bruhify.js create mode 100644 ChomensJS/plugins/chat.js create mode 100644 ChomensJS/plugins/cloop.js create mode 100644 ChomensJS/plugins/commands.js create mode 100644 ChomensJS/plugins/console.js create mode 100644 ChomensJS/plugins/core.js create mode 100644 ChomensJS/plugins/discord.js create mode 100644 ChomensJS/plugins/draw.js create mode 100644 ChomensJS/plugins/hash.js create mode 100644 ChomensJS/plugins/music.js create mode 100644 ChomensJS/plugins/players.js create mode 100644 ChomensJS/plugins/position.js create mode 100644 ChomensJS/plugins/proxy.js create mode 100644 ChomensJS/plugins/proxy/chat.js create mode 100644 ChomensJS/plugins/proxy/custom_chat.js create mode 100644 ChomensJS/plugins/proxy/self_care.js create mode 100644 ChomensJS/plugins/self_care.js create mode 100644 ChomensJS/plugins/tellraw.js create mode 100644 ChomensJS/plugins/tps.js create mode 100644 ChomensJS/plugins/vm.js create mode 100644 ChomensJS/replit_zip_error_log.txt create mode 100644 ChomensJS/util/between.js create mode 100644 ChomensJS/util/chat.js create mode 100644 ChomensJS/util/clamp.js create mode 100644 ChomensJS/util/colors/minecraft.js create mode 100644 ChomensJS/util/containsIllegalCharacters.js create mode 100644 ChomensJS/util/escapeMarkdown.js create mode 100644 ChomensJS/util/file-exists.js create mode 100644 ChomensJS/util/file-list.js create mode 100644 ChomensJS/util/getFilenameFromUrl.js create mode 100644 ChomensJS/util/image.js create mode 100644 ChomensJS/util/loadPlugins.js create mode 100644 ChomensJS/util/load_files.js create mode 100644 ChomensJS/util/midi_converter/convert_note.js create mode 100644 ChomensJS/util/midi_converter/instrument_map.js create mode 100644 ChomensJS/util/midi_converter/instruments.json create mode 100644 ChomensJS/util/midi_converter/main.js create mode 100644 ChomensJS/util/midi_converter/package.json create mode 100644 ChomensJS/util/midi_converter/percussion_map.js create mode 100644 ChomensJS/util/minecraftVersionToNumber.js create mode 100644 ChomensJS/util/nbs_converter.js create mode 100644 ChomensJS/util/nbs_file.js create mode 100644 ChomensJS/util/txt_song_parser.js create mode 100644 CommandModules/command_error.js create mode 100644 CommandModules/command_source.js create mode 100644 README.md create mode 100644 bot.js create mode 100644 chat/chipmunkmod.js create mode 100644 chat/chipmunkmodBlackilyKatVer.js create mode 100644 chat/kaboom.js create mode 100644 commands/botdevhistory.js create mode 100644 commands/bots.js create mode 100644 commands/cai.js create mode 100644 commands/calculator.js create mode 100644 commands/changelog.js create mode 100644 commands/chatterboxbot.js create mode 100644 commands/ckill.js create mode 100644 commands/cloop.js create mode 100644 commands/cloopcrash.js create mode 100644 commands/consoleserver.js create mode 100644 commands/core.js create mode 100644 commands/cowsay.js create mode 100644 commands/crash.js create mode 100644 commands/discordmsg.js create mode 100644 commands/echo.js create mode 100644 commands/errortest.js create mode 100644 commands/evaljs.js create mode 100644 commands/fard.js create mode 100644 commands/filedirectories.js create mode 100644 commands/filter.js create mode 100644 commands/freeze.js create mode 100644 commands/help.js create mode 100644 commands/icu.js create mode 100644 commands/info.js create mode 100644 commands/kick.js create mode 100644 commands/list.js create mode 100644 commands/lol.js create mode 100644 commands/mineflayerbot.js create mode 100644 commands/netmsg.js create mode 100644 commands/ping.js create mode 100644 commands/rc.js create mode 100644 commands/reconnect.js create mode 100644 commands/say.js create mode 100644 commands/selfdestruct.js create mode 100644 commands/skin.js create mode 100644 commands/spambot.js create mode 100644 commands/sudo.js create mode 100644 commands/test.js create mode 100644 commands/testbench.js create mode 100644 commands/tpr.js create mode 100644 commands/troll.js create mode 100644 commands/urban.js create mode 100644 commands/validate.js create mode 100644 commands/wiki.js create mode 100644 config.json create mode 100644 default.json create mode 100644 e. create mode 100644 e.env create mode 100644 e.nv create mode 100644 e.txt create mode 100644 index.js create mode 100644 lolus.json create mode 100644 modules/chat.js create mode 100644 modules/chat_command_handler.js create mode 100644 modules/command_core.js create mode 100644 modules/command_loop_manager.js create mode 100644 modules/command_manager.js create mode 100644 modules/console.js create mode 100644 modules/discord.js create mode 100644 modules/hashing.js create mode 100644 modules/player_list.js create mode 100644 modules/position.js create mode 100644 modules/reconnect.js create mode 100644 modules/registry.js create mode 100644 modules/selfcare.js create mode 100644 modules/startup.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 shutdown.js create mode 100644 util/between.js create mode 100644 util/blacklist util/auto_deop.js create mode 100644 util/blacklist util/auto_mute.js create mode 100644 util/blacklist util/list.txt create mode 100644 util/escapeMarkdown.js create mode 100644 util/eval_colors.js create mode 100644 util/file-exists.js create mode 100644 util/files.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c4e208b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.env +node_modules +.upm +.replit +replit.nix +new file \ No newline at end of file diff --git a/ChomensJS/README.md b/ChomensJS/README.md new file mode 100644 index 0000000..0e6d65d --- /dev/null +++ b/ChomensJS/README.md @@ -0,0 +1,11 @@ +# chomens-bot-js +***(originally named chomens-bot-mc)***\ +\ +Archive of ChomeNS Bot Javascript source code.\ +\ +Some of the code are messy and hardcoded so you might wanna change some of it.\ +\ +Explore the code and see how it works!\ +Also note that the core is broken sometimes. + +R.I.P ChomeNS Bot Javascript diff --git a/ChomensJS/bot.js b/ChomensJS/bot.js new file mode 100644 index 0000000..4216cbd --- /dev/null +++ b/ChomensJS/bot.js @@ -0,0 +1,128 @@ +const mc = require('minecraft-protocol') +const { EventEmitter } = require('events') +const { loadPlugins } = require('./util/loadPlugins') +const util = require('node:util') +const randomstring = require('randomstring') + +/** + * makes the bot + * @param {object} server the server object used in the config + * @param {object} config the config file + * @param {Function} getBots get bots function in index.js + * @param {Function} setNewBot ig real + * @param {Class} dcclient discord client + * @param {object} rl readline. + * @return {object} the bot object + */ +async function createBot (server, config, getBots, setNewBot, dcclient, rl) { + const bot = new EventEmitter() + bot.options = { + username: server.username ?? randomstring.generate(8), + host: server.host ?? 'localhost', + port: server.port ?? 25565, + version: config.version, + kaboom: server.kaboom ?? true, + logging: server.logging ?? true, + useChat: server.useChat ?? false, + checkTimeoutInterval: config.timeoutInterval, + hideErrors: true + } + + // among us fix for bot.options.host and bot.options.port + bot.server = { + host: server.host, + port: server.port + } + + bot.visibility = false + bot.getBots = getBots + + bot.end = (reason = 'end', event) => { + bot.emit('end', reason, event) + bot.removeAllListeners() + bot._client.end() + bot._client.removeAllListeners() + } + + bot._client = mc.createClient(bot.options) + + bot.setMaxListeners(Infinity) + bot._client.setMaxListeners(Infinity) + + bot.version = bot._client.version + bot.write = (name, data) => bot._client.write(name, data) + + setNewBot(bot.server.host, bot) + + const channel = dcclient.channels.cache.get(config.discord.servers[`${bot.server.host}:${bot.server.port}`]) + + channel.send( + `Connecting to: \`${bot.server.host}:${bot.server.port}\`` + ) + + bot._client.on('login', (data) => bot.emit('login', data)) + + bot.on('login', async function (data) { + bot.entityId = data.entityId + bot.uuid = bot._client.uuid + bot.username = bot._client.username + + channel.send( + `Successfully logged in to: \`${bot.server.host}:${bot.server.port}\`` + ) + }) + + await loadPlugins(bot, dcclient, config, rl) + + bot._client.on('end', (reason) => { + bot.end(reason, 'end') + }) + + bot.on('end', (reason, event) => { + bot.console.info( + `Disconnected from ${bot.server.host} (${event} event): ${util.inspect(reason)}` + ) + channel.send(`Disconnected: \`${util.inspect(reason)}\``) + + let timeout = config.reconnectTimeout + + try { + if (reason.text) { + if (reason.text === + 'Wait 5 seconds before connecting, thanks! :)' || + reason.text === + 'You are logging in too fast, try again later.' + ) timeout = 1000 * 7 + } + } catch (e) { + bot.console.error(e) + } + + setTimeout(() => { + bot.end() + createBot(server, config, getBots, setNewBot, dcclient, rl) + }, timeout) + }) + + bot._client.on('keep_alive', ({ keepAliveId }) => { + bot.write('keep_alive', { keepAliveId }) + }) + + bot._client.on('kick_disconnect', (data) => { + const parsed = JSON.parse(data.reason) + bot.end(parsed, 'kick_disconnect') + }) + + bot._client.on('disconnect', (data) => { + const parsed = JSON.parse(data.reason) + bot.end(parsed, 'disconnect') + }) + + bot._client.on('error', (data) => { + bot.end(data, 'error') + }) + + return bot +}; + +module.exports = { createBot } diff --git a/ChomensJS/commands/botuser.js b/ChomensJS/commands/botuser.js new file mode 100644 index 0000000..68e6fe5 --- /dev/null +++ b/ChomensJS/commands/botuser.js @@ -0,0 +1,18 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'botuser', + alias: [], + description: 'Shows the bot\'s username and UUID', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.tellraw(selector, [{ text: 'The bot\'s username is: ', color: 'white' }, { text: bot.username, color: 'gold', clickEvent: { action: 'copy_to_clipboard', value: bot.username }, hoverEvent: { action: 'show_text', contents: [{ text: 'Click here to copy the username to your clipboard', color: 'green' }] } }, { text: ' and the UUID is: ' }, { text: bot.uuid, color: 'aqua', clickEvent: { action: 'copy_to_clipboard', value: bot.uuid }, hoverEvent: { action: 'show_text', contents: [{ text: 'Click here to copy the UUID to your clipboard', color: 'green' }] } }]) + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Bot\'s User') + .setDescription(`The bot's username is: \`${bot.username}\` and the UUID is: \`${bot.uuid}\``) + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/botvisibility.js b/ChomensJS/commands/botvisibility.js new file mode 100644 index 0000000..639166e --- /dev/null +++ b/ChomensJS/commands/botvisibility.js @@ -0,0 +1,63 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'botvisibility', + alias: ['botvis', 'togglevis', 'togglevisibility'], + description: 'Changes the bot\'s visibility', + usage: [ + ' ', + ' ', + '' + ], + trusted: 1, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[1] === 'true' || args[1] === 'on') { + bot.visibility = true + bot.chat('/essentials:vanish disable') + bot.tellraw(selector, [{ text: 'The bot\'s visibility is now ', color: 'white' }, { text: 'visible', color: 'green' }]) + } else if (args[1] === 'false' || args[1] === 'off') { + bot.visibility = false + bot.chat('/essentials:vanish enable') + bot.tellraw(selector, [{ text: 'The bot\'s visibility is now ', color: 'white' }, { text: 'invisible', color: 'gold' }]) + } else if (!args[1]) { + bot.visibility = !bot.visibility + const greenOrGold = bot.visibility ? 'green' : 'gold' + const visibleOrInvisible = bot.visibility ? 'visible' : 'invisible' + const enableOrDisable = bot.visibility ? 'disable' : 'enable' + bot.chat(`/essentials:vanish ${enableOrDisable}`) + bot.tellraw(selector, [{ text: 'The bot\'s visibility is now ', color: 'white' }, { text: visibleOrInvisible, color: greenOrGold }]) + } else { + throw new SyntaxError('Invalid argument') + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + if (args[0] === 'true' || args[0] === 'on') { + bot.visibility = true + bot.chat('/essentials:vanish disable') + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Bot\'s Visibility') + .setDescription('The bot\'s visibility is now visible') + channeldc.send({ embeds: [Embed] }) + } else if (args[0] === 'false' || args[0] === 'off') { + bot.visibility = false + bot.chat('/essentials:vanish enable') + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Bot\'s Visibility') + .setDescription('The bot\'s visibility is now invisible') + channeldc.send({ embeds: [Embed] }) + } else if (!args[0]) { + bot.visibility = !bot.visibility + const visibleOrInvisible = bot.visibility ? 'visible' : 'invisible' + const enableOrDisable = bot.visibility ? 'disable' : 'enable' + bot.chat(`/essentials:vanish ${enableOrDisable}`) + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Bot\'s Visibility') + .setDescription(`The bot's visibility is now ${visibleOrInvisible}`) + channeldc.send({ embeds: [Embed] }) + } else { + throw new SyntaxError('Invalid argument') + } + } +} diff --git a/ChomensJS/commands/bruhify.js b/ChomensJS/commands/bruhify.js new file mode 100644 index 0000000..782d507 --- /dev/null +++ b/ChomensJS/commands/bruhify.js @@ -0,0 +1,19 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'bruhify', + alias: [], + description: 'RecycleBot bruhify but actionbar', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.bruhifyText = args.join(' ') + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + bot.bruhifyText = args.join(' ') + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Bruhify') + .setDescription(`Bruhify set to: ${bot.bruhifyText}`) + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/cb.js b/ChomensJS/commands/cb.js new file mode 100644 index 0000000..42db4a0 --- /dev/null +++ b/ChomensJS/commands/cb.js @@ -0,0 +1,13 @@ +module.exports = { + name: 'cb', + alias: ['cmd', 'commandblock', 'run'], + description: 'Executes a command in the command core', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.core.run(args.join(' ')) + }, + discordExecute (bot, username, sender, prefix, args, channeldc) { + bot.core.run(args.join(' ')) + } +} diff --git a/ChomensJS/commands/clearchat.js b/ChomensJS/commands/clearchat.js new file mode 100644 index 0000000..91f5255 --- /dev/null +++ b/ChomensJS/commands/clearchat.js @@ -0,0 +1,22 @@ + +module.exports = { + name: 'clearchat', + alias: ['cc'], + description: 'Clears the chat', + usage: '[player]', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[0]) { + bot.tellraw(args.join(' '), [{ text: '\n'.repeat(100), color: 'white' }, { text: `Your chat has been cleared by ${username}.`, color: 'dark_green' }]) + } else { + bot.tellraw('@a', [{ text: '\n'.repeat(100), color: 'white' }, { text: 'The chat has been cleared.', color: 'dark_green' }]) + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message) { + if (args[0]) { + bot.tellraw(args.join(' '), [{ text: '\n'.repeat(100), color: 'white' }, { text: `Your chat has been cleared by ${username} (on Discord).`, color: 'dark_green' }]) + } else { + bot.tellraw('@a', [{ text: '\n'.repeat(100), color: 'white' }, { text: 'The chat has been cleared.', color: 'dark_green' }]) + } + } +} diff --git a/ChomensJS/commands/clearchatqueue.js b/ChomensJS/commands/clearchatqueue.js new file mode 100644 index 0000000..5a47f48 --- /dev/null +++ b/ChomensJS/commands/clearchatqueue.js @@ -0,0 +1,19 @@ +module.exports = { + name: 'clearchatqueue', + description: 'Clears the bot\'s chat queue', + alias: ['ccq'], + usage: '', + trusted: 0, + execute (bot) { + if (bot._chatQueue[0]) { + bot.chatQueue = [] + bot._chatQueue = [] + } + }, + discordExecute (bot) { + if (bot._chatQueue[0]) { + bot.chatQueue = [] + bot._chatQueue = [] + } + } +} diff --git a/ChomensJS/commands/cloop.js b/ChomensJS/commands/cloop.js new file mode 100644 index 0000000..b7ebb76 --- /dev/null +++ b/ChomensJS/commands/cloop.js @@ -0,0 +1,102 @@ + +const { EmbedBuilder } = require('discord.js') + +function list (bot, discord, channeldc, selector, config) { + const message = [] + + if (discord) { + for (const [index, { command, interval, list }] of Object.entries(bot.cloop.list)) { + if (!list) continue + message.push(index) + message.push(' > ') + message.push(`\`${command}\``) + message.push(' - ') + message.push(interval) + message.push('\n') + } + + message.pop() + + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Cloops') + .setDescription(message.join('')) + channeldc.send({ embeds: [Embed] }) + } else { + message.push({ text: 'Cloops:', color: 'green' }) + message.push('\n') + + for (const [index, { command, interval, list }] of Object.entries(bot.cloop.list)) { + if (!list) continue + message.push({ text: index, color: 'aqua' }) + message.push({ text: ' > ', color: 'gold' }) + message.push({ text: command, color: 'green' }) + message.push({ text: ' - ', color: 'gold' }) + message.push({ text: interval, color: 'green' }) + message.push('\n') + } + + message.pop() + + bot.tellraw(selector, message) + } +} + +module.exports = { + name: 'cloop', + alias: [], + description: 'Loop commands', + usage: [ + ' add ', + ' remove ', + ' removeall|clear', + ' list' + ], + trusted: 1, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[1] === 'add' && args[3]) { + if (!Number(args[2]) && Number(args[2]) !== 0) throw new SyntaxError('Invalid interval') + bot.cloop.add(args.slice(3).join(' '), args[2]) + bot.tellraw(selector, [{ text: 'Added command ', color: 'white' }, { text: args.slice(3).join(' '), color: 'aqua' }, { text: ' with interval ', color: 'white' }, { text: args[2], color: 'green' }, { text: ' to the cloops', color: 'white' }]) + } else if (args[1] === 'list') { + list(bot, false, null, selector) + } else if (args[1] === 'remove') { + bot.cloop.remove(args[2]) + bot.tellraw(selector, [{ text: 'Removed cloop ' }, { text: args[2], color: 'aqua' }]) + } else if (args[1] === 'removeall' || args[1] === 'clear') { + bot.cloop.clear() + bot.tellraw(selector, [{ text: 'Removed all looped commands', color: 'white' }]) + } else { + throw new SyntaxError('Invalid argument') + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + if (args[0] === 'add' && args[2]) { + if (!Number(args[1]) && Number(args[1]) !== 0) throw new SyntaxError('Invalid interval') + bot.cloop.add(args.slice(2).join(' '), args[1]) + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Cloop') + .setDescription(`Added cloop \`${args.slice(2).join(' ')}\` with interval ${args[1]} to the cloops`) + channeldc.send({ embeds: [Embed] }) + } else if (args[0] === 'list') { + list(bot, true, channeldc, '@a', config) + } else if (args[0] === 'remove') { + bot.cloop.remove(args[1]) + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Cloop') + .setDescription(`Removed cloop \`${args[1]}\``) + channeldc.send({ embeds: [Embed] }) + } else if (args[0] === 'removeall' || args[0] === 'clear') { + bot.cloop.clear() + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Cloop') + .setDescription('Removed all looped commands') + channeldc.send({ embeds: [Embed] }) + } else { + throw new Error('Invalid argument') + } + } +} diff --git a/ChomensJS/commands/cowsay.js b/ChomensJS/commands/cowsay.js new file mode 100644 index 0000000..2a653e2 --- /dev/null +++ b/ChomensJS/commands/cowsay.js @@ -0,0 +1,43 @@ +const cowsay = require('cowsay2') +const cows = require('cowsay2/cows') +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'cowsay', + alias: [], + description: 'Moo', + usage: [ + 'cow ', + 'list (not supported on Discord)' + ], + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[0] === 'list') { + const listed = Object.keys(cows) + + let primary = true + const message = [] + + for (const value of listed) { + message.push({ + text: value + ' ', + color: (!((primary = !primary)) ? 'gold' : 'yellow'), + clickEvent: { + action: 'suggest_command', + value: `${prefix}cowsay ${value} ` + } + }) + } + + bot.tellraw(selector, message) + } else { + bot.tellraw(selector, { text: cowsay.say(args.slice(1).join(' '), { cow: cows[args[0]] }) }) + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Cowsay') + .setDescription(`\`\`\`\n${cowsay.say(args.slice(1).join(' '), { cow: cows[args[0]] })}\n\`\`\``) + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/creator.js b/ChomensJS/commands/creator.js new file mode 100644 index 0000000..a9a20b0 --- /dev/null +++ b/ChomensJS/commands/creator.js @@ -0,0 +1,18 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'creator', + alias: [], + description: 'Shows the bot\'s creator', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.tellraw(selector, [{ text: 'ChomeNS Bot ', color: 'yellow' }, { text: 'was created by ', color: 'white' }, { text: 'chayapak', color: 'gold' }, { text: ' (', color: 'dark_gray' }, { text: 'Cloned ', color: 'blue' }, { text: 'by ', color: 'white' }, { text: 'Parker', color: 'dark_red' }, { text: '2991', color: 'black' }, { text: ')', color: 'dark_gray' }]) + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Creator') + .setDescription('ChomeNS Bot was created by chayapak (§9Cloned by §4Parker§02991)') + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/discord.js b/ChomensJS/commands/discord.js new file mode 100644 index 0000000..b5df787 --- /dev/null +++ b/ChomensJS/commands/discord.js @@ -0,0 +1,23 @@ +module.exports = { + name: 'discord', + alias: [], + description: 'Shows the discord invite', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.tellraw(selector, [ + { + text: 'The Discord invite is ', + color: 'white' + }, + { + text: 'https://discord.gg/xdgCkUyaA4', + color: 'blue', + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/xdgCkUyaA4' + } + } + ]) + } +} diff --git a/ChomensJS/commands/draw.js b/ChomensJS/commands/draw.js new file mode 100644 index 0000000..789f83f --- /dev/null +++ b/ChomensJS/commands/draw.js @@ -0,0 +1,41 @@ +const { resize } = require('../util/image') +const axios = require('axios') +const sharp = require('sharp') + +module.exports = { + name: 'draw', + description: 'Draws an image', + alias: [], + trusted: 0, + usage: '', + execute: async function (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + let image + try { + const url = args.join(' ') + + image = await axios.get('https://http-proxy.nongsonchome.repl.co', { + params: { + uri: url + }, + responseType: 'arraybuffer' + }) + + const loaded = sharp(image.data) + + const metadata = await loaded + .metadata() + + const { width, height } = resize(metadata.width, metadata.height) + + const { data, info } = await loaded + .resize({ fit: 'fill', kernel: 'nearest', width, height }) + .raw() + .toBuffer({ resolveWithObject: true }) + + bot.draw(data, info) + } catch (_err) { + const e = _err.toString() === 'Error: Input buffer contains unsupported image format' ? image.data.toString() : _err + bot.tellraw(selector, { text: e, color: 'red' }) + } + } +} diff --git a/ChomensJS/commands/echo.js b/ChomensJS/commands/echo.js new file mode 100644 index 0000000..67dbbb8 --- /dev/null +++ b/ChomensJS/commands/echo.js @@ -0,0 +1,13 @@ +module.exports = { + name: 'echo', + alias: [], + description: 'Says a message', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.chat(args.join(' ')) + }, + discordExecute (bot, username, sender, prefix, args, channeldc) { + bot.chat(args.join(' ')) + } +} diff --git a/ChomensJS/commands/end.js b/ChomensJS/commands/end.js new file mode 100644 index 0000000..506f02f --- /dev/null +++ b/ChomensJS/commands/end.js @@ -0,0 +1,13 @@ +module.exports = { + name: 'end', + alias: [], + description: 'Ends the bot\'s client', + usage: '', + trusted: 1, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.end('end command') + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message) { + bot.end('end command') + } +} diff --git a/ChomensJS/commands/eval.js b/ChomensJS/commands/eval.js new file mode 100644 index 0000000..d706ae1 --- /dev/null +++ b/ChomensJS/commands/eval.js @@ -0,0 +1,60 @@ +const { EmbedBuilder } = require('discord.js') +const { VM } = require('vm2') +const axios = require('axios') +const util = require('util') +const { stylize } = require('../util/colors/minecraft') +module.exports = { + name: 'eval', + alias: [], + description: 'Safe eval 100% secure!!!', + trusted: 1, + usage: [ + 'run ', + 'reset' + ], + async execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[0] === 'run') { + try { + bot.tellraw(selector, { text: util.inspect(bot.vm.run(args.slice(1).join(' ')), { stylize }).substring(0, 32000) }) + } catch (err) { + bot.tellraw(selector, { text: util.inspect(err).replaceAll('runner', 'Parker2991'), color: 'red' }) + } + } + if (args[0] === 'reset') { + bot.vm = new VM(bot.vmOptions) + } + if (args[0] === 'server') { + const res = await axios.post(config.eval.serverUrl, new URLSearchParams({ + html: false, + showErrorMsg: false, + colors: 'minecraft', + code: args.slice(1).join(' ') + }).toString()) + bot.tellraw(selector, { text: res.data }) + } + }, + async discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + if (args[0] === 'run') { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Output') + .setDescription(`\`\`\`${util.inspect(bot.vm.run(args.slice(1).join(' '))).substring(0, 1950)}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } else if (args[0] === 'reset') { + bot.vm = new VM(bot.vmOptions) + } else if (args[0] === 'server') { + const res = await axios.post(config.eval.serverUrl, new URLSearchParams({ + html: false, + showErrorMsg: false, + code: args.slice(1).join(' ') + }).toString()) + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Output') + .setDescription(`\`\`\`${res.data}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } else { + throw new SyntaxError('Invalid argument') + } + } +} diff --git a/ChomensJS/commands/help.js b/ChomensJS/commands/help.js new file mode 100644 index 0000000..bb7ca1f --- /dev/null +++ b/ChomensJS/commands/help.js @@ -0,0 +1,152 @@ +//samething here +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'help', + alias: ['heko', 'cmds', 'commands'], + description: 'Shows the help', + usage: '[command]', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[0]) { + for (const command of bot.command_handler.commands) { + function run () { + let alias = command.name + + if (command.alias.toString() !== '') { + alias = command.alias.join(', ') + } + + const usage = [] + if (typeof command.usage === 'string') { + usage.push({ text: `${prefix}${command.name} `, color: 'gold' }) + usage.push({ text: command.usage, color: 'aqua' }) + } else { + for (const value of command.usage) { + usage.push({ text: `${prefix}${command.name} `, color: 'gold' }) + usage.push({ text: value, color: 'aqua' }) + usage.push('\n') + } + usage.pop() + } + + const component = [] + component.push({ text: prefix + command.name, color: 'gold' }) + component.push({ text: ` (${alias})`, color: 'white' }) + component.push({ text: ' - ', color: 'gray' }) + component.push({ text: command.description, color: 'gray' }) + + component.push('\n') + + component.push({ text: 'Trust level: ', color: 'green' }) + component.push({ text: command.trusted, color: 'yellow' }) + + component.push('\n') + + component.push({ text: 'Supported on Discord: ', color: 'green' }) + component.push({ text: command.discordExecute ? 'true' : 'false', color: 'gold' }) + + component.push('\n') + + component.push(usage) + + bot.tellraw(selector, component) + } + + if (command.name === args[0]) run() + for (const alias of command.alias) { + if (alias === args[0]) run() + } + }; + } else { + const generalCommands = [] + const trustedCommands = [] + const ownerCommands = [] + function component (command, color) { + return { + text: command.name + ' ', + color, + hoverEvent: { + action: 'show_text', + contents: [{ + text: 'Click here to see the information for this command', + color: 'green' + }] + }, + clickEvent: { + action: 'run_command', + value: `${prefix}help ${command.name}` + } + } + }; + for (const command of bot.command_handler.commands) { + if (command.trusted !== 0 || command.proxy) continue + generalCommands.push(component(command, 'green')) + } + for (const command of bot.command_handler.commands) { + if (command.trusted !== 1 || command.proxy) continue + trustedCommands.push(component(command, 'red')) + } + for (const command of bot.command_handler.commands) { + if (command.trusted !== 2 || command.proxy) continue + ownerCommands.push(component(command, 'dark_red')) + } + + const pre = [{ text: 'Commands ', color: 'gray' }, { text: '(', color: 'dark_gray' }, { text: 'Length: ', color: 'gray' }, { text: bot.command_handler.commands.length, color: 'green' }, { text: ') ', color: 'dark_gray' }, { text: '(', color: 'dark_gray' }, { text: 'Public ', color: 'green' }, { text: 'Trusted ', color: 'red' }, { text: 'Owner', color: 'dark_red' }, { text: ') - ', color: 'dark_gray' }] + bot.tellraw(selector, [pre, generalCommands, trustedCommands, ownerCommands]) + } + }, + discordExecute: async function (bot, username, sender, prefix, args, channeldc, message, config) { + if (args[0]) { + for (const command of bot.command_handler.commands) { + function run () { + let alias = command.name + + if (command.alias.toString() !== '') { + alias = command.alias.join(', ') + } + + const usage = [] + if (typeof command.usage === 'string') { + usage.push(`${prefix}${command.name} ${command.usage}`) + } else { + for (const value of command.usage) { + usage.push(`${prefix}${command.name} ${value}`) + usage.push('\n') + } + usage.pop() + } + + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle(`${prefix + command.name} (${alias}) - ${command.description}`) + .setDescription(`Trust level: ${command.trusted} + Supported: ${command.discordExecute ? 'true' : 'false'} + ${usage}` + ) + channeldc.send({ embeds: [Embed] }) + } + + if (command.name === args[0]) run() + for (const alias of command.alias) { + if (alias === args[0]) run() + } + }; + } else { + let supportedCommands = '' + let unsupportedCommands = '' + for (const command of bot.command_handler.commands) { + if (!command.discordExecute) continue + supportedCommands += command.name + ' ' + } + for (const command of bot.command_handler.commands) { + if (command.discordExecute || command.proxy) continue + unsupportedCommands += command.name + ' ' + } + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle(`Commands (Length: ${bot.command_handler.commands.length})`) + .setDescription('**Supported Commands**\n' + supportedCommands + '\n**Unsupported Commands**\n' + unsupportedCommands) + channeldc.send({ embeds: [Embed] }) + } + } +} diff --git a/ChomensJS/commands/list.js b/ChomensJS/commands/list.js new file mode 100644 index 0000000..08cefb0 --- /dev/null +++ b/ChomensJS/commands/list.js @@ -0,0 +1,76 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'list', + alias: [], + description: 'List players', + usage: '', + trusted: 0, + execute: async function (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + try { + const component = [] + component.push({ text: 'Players ', color: 'green' }) + component.push({ text: '(', color: 'dark_gray' }) + component.push({ text: bot.players.list.length, color: 'gray' }) + component.push({ text: ')', color: 'dark_gray' }) + component.push('\n') + for (const property of bot.players.list) { + // if (property.match.startsWith('@')) continue; + component.push({ + text: property.name, + color: 'yellow', + clickEvent: { + action: 'copy_to_clipboard', + value: property.name + }, + hoverEvent: { + action: 'show_text', + contents: [{ + text: 'Click here to copy the username to your clipboard', + color: 'green' + }] + } + }) + component.push({ + text: ' › ', + color: 'dark_gray' + }) + component.push({ + text: property.UUID, + color: 'aqua', + clickEvent: { + action: 'copy_to_clipboard', + value: property.UUID + }, + hoverEvent: { + action: 'show_text', + contents: [{ + text: 'Click here to copy the UUID to your clipboard', + color: 'green' + }] + } + }) + component.push('\n') + } + component.pop() + bot.tellraw(selector, component) + } catch (e) { + + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + try { + let players = '' + for (const property of bot.players.list) { + // if (property.match.startsWith('@')) continue; + players += `\`${property.name}\` › \`${property.UUID}\`` + '\n' + } + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle(`Players (${bot.players.list.length})`) + .setDescription(players.substring(0, 4096)) + channeldc.send({ embeds: [Embed] }) + } catch (e) { + + } + } +} diff --git a/ChomensJS/commands/music.js b/ChomensJS/commands/music.js new file mode 100644 index 0000000..a9c110e --- /dev/null +++ b/ChomensJS/commands/music.js @@ -0,0 +1,369 @@ +/* eslint-disable no-case-declarations */ + +const fs = require('fs/promises') +const { EmbedBuilder } = require('discord.js') +const path = require('path') +const getFilenameFromUrl = require('../util/getFilenameFromUrl') +const fileExists = require('../util/file-exists') +const fileList = require('../util/file-list') +const axios = require('axios') +const os = require('os') + +let SONGS_PATH + +if (os.hostname() === 'chomens-kubuntu') { + SONGS_PATH = path.join(__dirname, '..', '..', 'nginx-html', 'midis') +} else { + SONGS_PATH = path.join(__dirname, '..', 'midis') +} + +let song + +async function play (bot, values, discord, channeldc, selector, config) { + try { + const filepath = values.join(' ') + + const seperator = path.sep // for hosting bot on windows + + let absolutePath + if (filepath.includes(seperator) && filepath !== '') { + const pathSplitted = filepath.split(seperator) + + const songs = await fileList( + path.join( + SONGS_PATH, + pathSplitted[0] + ) + ) + + // this part took a bunch of time to figure out, but still chomens moment!1! + const lowerCaseFile = pathSplitted.pop().toLowerCase() + const file = songs.filter((song) => song.toLowerCase().includes(lowerCaseFile))[0] + + absolutePath = await resolve(path.join(pathSplitted.join(seperator), file)) + } else { + const songs = await fileList(SONGS_PATH) + const file = songs.filter((song) => song.toLowerCase().includes(filepath.toLowerCase()))[0] + absolutePath = await resolve(file) + } + + song = await bot.music.load(await fs.readFile(absolutePath), path.basename(absolutePath)) + + if (discord) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Music') + .setDescription(`Added ${song.name} to the song queue`) + channeldc.send({ embeds: [Embed] }) + } else { + bot.tellraw(selector, [{ text: 'Added ', color: 'white' }, { text: song.name, color: 'gold' }, { text: ' to the song queue', color: 'white' }]) + } + + bot.music.queue.push(song) + bot.music.play(song) + } catch (e) { + bot.console.error(e.stack) + if (discord) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription('```SyntaxError: Invalid file```') + channeldc.send({ embeds: [Embed] }) + } else { + bot.tellraw(selector, { text: 'SyntaxError: Invalid file', color: 'red' }) + } + } +} + +async function playUrl (bot, values, discord, channeldc, selector, config) { + let response + try { + const url = values.join(' ') + response = await axios.get('https://http-proxy.nongsonchome.repl.co', { + params: { + uri: url + }, + responseType: 'arraybuffer' + }) + + song = await bot.music.load(response.data, getFilenameFromUrl(url)) + + if (discord) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Music') + .setDescription(`Added ${song.name} to the song queue`) + channeldc.send({ embeds: [Embed] }) + } else { + bot.tellraw(selector, [{ text: 'Added ', color: 'white' }, { text: song.name, color: 'gold' }, { text: ' to the song queue', color: 'white' }]) + } + + bot.music.queue.push(song) + bot.music.play(song) + } catch (_err) { + const e = _err.toString().includes('Bad MIDI file. Expected \'MHdr\', got: ') ? response.data.toString() : _err + if (discord) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription(`\`\`\`${e}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } else { + bot.tellraw(selector, { text: e, color: 'red' }) + } + } +} + +async function resolve (filepath) { + if (!path.isAbsolute(filepath) && await fileExists(SONGS_PATH)) { + return path.join(SONGS_PATH, filepath) + } + return filepath +} + +async function list (bot, discord, channeldc, prefix, selector, args, config) { + try { + let absolutePath + if (args[1]) absolutePath = await resolve(path.join(SONGS_PATH, args.slice(1).join(' '))) + else absolutePath = await resolve(SONGS_PATH) + + if (!absolutePath.includes('midis')) throw new Error('bro trying to hack my server?!/1?!') + + const listed = await fileList(absolutePath) + + if (discord) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Songs') + .setDescription(listed.join(', ')) + channeldc.send({ embeds: [Embed] }) + return + } + + let primary = true + const message = [] + + for (const value of listed) { + const isFile = (await fs.lstat(path.join(absolutePath, value))).isFile() + message.push({ + text: value + ' ', + color: (!((primary = !primary)) ? 'gold' : 'yellow'), + clickEvent: { + action: 'suggest_command', + value: `${prefix}music ${isFile ? 'play' : 'list'} ${path.join(args.slice(1).join(' '), value)}` + }, + hoverEvent: { + action: 'show_text', + contents: [ + { text: 'Name: ', color: 'white' }, + { text: value, color: 'gold' }, + '\n', + { text: 'Click here to suggest the command!', color: 'green' } + ] + } + }) + }; + + bot.tellraw(selector, message) + } catch (e) { + if (discord) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription(`\`\`\`${e.toString()}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } else { + bot.tellraw(selector, { text: e.toString(), color: 'red' }) + } + } +}; + +module.exports = { + name: 'music', + description: 'Plays music', + alias: [], + trusted: 0, + usage: [ + 'play ', + 'stop', + 'loop ', + 'list [directory]', + 'skip', + 'nowplaying', + 'queue' + ], + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + switch (args[0]) { + case 'play': + case 'playurl': // deprecated + if (args.slice(1).join(' ').startsWith('http')) { + playUrl(bot, args.slice(1), false, null, selector, config) + } else { + play(bot, args.slice(1), false, null, selector, config) + } + break + case 'stop': + bot.tellraw(selector, { text: 'Cleared the song queue' }) + bot.music.stop() + break + case 'skip': + try { + bot.tellraw(selector, [{ text: 'Skipping ' }, { text: bot.music.song.name, color: 'gold' }]) + bot.music.skip() + } catch (e) { + throw new Error('No music is currently playing!') + } + break + case 'loop': + switch (args[1]) { + case 'off': + bot.music.loop = 0 + bot.tellraw(selector, [ + { + text: 'Looping is now ' + }, + { + text: 'disabled', + color: 'red' + } + ]) + break + case 'current': + bot.music.loop = 1 + bot.tellraw(selector, [ + { + text: 'Now Looping ' + }, + { + text: song.name, + color: 'gold' + } + ]) + break + case 'all': + bot.music.loop = 2 + bot.tellraw(selector, { + text: 'Now looping every song' + }) + break + default: + throw new SyntaxError('Invalid argument') + } + break + case 'list': + list(bot, false, null, prefix, selector, args, config) + break + case 'nowplaying': + bot.tellraw(selector, [ + { + text: 'Now playing ' + }, + { + text: bot.music.song.name, + color: 'gold' + } + ]) + break + case 'queue': + const queueWithName = [] + for (const song of bot.music.queue) queueWithName.push(song.name) + bot.tellraw(selector, [ + { + text: 'Queue: ', + color: 'green' + }, + { + text: queueWithName.join(', '), + color: 'aqua' + } + ]) + break + default: + throw new SyntaxError('Invalid argument') + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + let Embed + switch (args[0]) { + case 'play': + play(bot, args.slice(1), true, channeldc, config) + break + case 'playurl': + playUrl(bot, args.slice(1), true, channeldc, config) + break + case 'stop': + try { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Stop') + .setDescription('Cleared the song queue') + channeldc.send({ embeds: [Embed] }) + } catch (e) { + return + } + bot.music.stop() + break + case 'skip': + try { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Skip') + .setDescription(`Skipping ${bot.music.song.name}`) + channeldc.send({ embeds: [Embed] }) + bot.music.skip() + } catch (e) { + throw new Error('No music is currently playing!') + } + break + case 'loop': + switch (args[1]) { + case 'off': + bot.music.loop = 0 + Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Loop') + .setDescription('Looping is now disabled') + channeldc.send({ embeds: [Embed] }) + break + case 'current': + bot.music.loop = 1 + Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Loop') + .setDescription(`Now looping ${song.name}`) + channeldc.send({ embeds: [Embed] }) + break + case 'all': + bot.music.loop = 2 + Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Loop') + .setDescription('Now looping every song') + channeldc.send({ embeds: [Embed] }) + break + } + break + case 'list': + list(bot, true, channeldc, prefix, '@a', args, config) + break + case 'nowplaying': + Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Now playing') + .setDescription(`Now playing ${bot.music.song.name}`) + channeldc.send({ embeds: [Embed] }) + break + case 'queue': + const queueWithName = [] + for (const song of bot.music.queue) queueWithName.push(song.name) + Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Queue') + .setDescription(queueWithName.join(', ')) + channeldc.send({ embeds: [Embed] }) + break + default: + throw new SyntaxError('Invalid argument') + } + } +} diff --git a/ChomensJS/commands/netmsg.js b/ChomensJS/commands/netmsg.js new file mode 100644 index 0000000..db579fc --- /dev/null +++ b/ChomensJS/commands/netmsg.js @@ -0,0 +1,50 @@ +module.exports = { + name: 'netmsg', + alias: ['networkmessage', 'irc'], + description: 'Broadcasts a message to all of the servers that the bot is connected', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + const message = args.join(' ') + + if (message.toLowerCase().includes('netmsg')) return // lazy fix + + const component = [ + { + text: '[', + color: 'dark_gray' + }, + { + text: bot.server.host === 'kitsune.icu' ? 'kit' : bot.server.host, + color: 'gray' + }, + bot.server.host === 'kitsune.icu' + ? { + text: 'sune.icu', + color: 'gray' + } + : '', + { + text: '] ', + color: 'dark_gray' + }, + { + text: username, + color: 'gray' + }, + { + text: ' \u203a ', + color: 'dark_gray' + }, + { + text: message, + color: 'gray' + } + ] + + const bots = bot.getBots() + for (const bot of bots) { + bot.tellraw(selector, component) + } + } +} diff --git a/ChomensJS/commands/refillcore.js b/ChomensJS/commands/refillcore.js new file mode 100644 index 0000000..2a8b9ba --- /dev/null +++ b/ChomensJS/commands/refillcore.js @@ -0,0 +1,13 @@ +module.exports = { + name: 'refillcore', + alias: ['rc'], + description: 'Resets the bot\'s command core', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.core.fillCore() + }, + discordExecute (bot) { + bot.core.fillCore() + } +} diff --git a/ChomensJS/commands/rtp.js b/ChomensJS/commands/rtp.js new file mode 100644 index 0000000..a6eca97 --- /dev/null +++ b/ChomensJS/commands/rtp.js @@ -0,0 +1,13 @@ +const { between } = require('../util/between') +module.exports = { + name: 'rtp', + alias: [], + description: 'Randomly teleports the player', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + const pos = `${between(1000, 10000)} 100 ${between(1000, 10000)}` + bot.tellraw(selector, [{ text: 'Teleporting ', color: 'white' }, { text: username, color: 'aqua' }, { text: ' to ', color: 'white' }, { text: pos, color: 'green' }, { text: '...', color: 'white' }]) + bot.core.run(`essentials:teleport ${sender} ${pos}`) + } +} diff --git a/ChomensJS/commands/servereval.js b/ChomensJS/commands/servereval.js new file mode 100644 index 0000000..466a6a1 --- /dev/null +++ b/ChomensJS/commands/servereval.js @@ -0,0 +1,33 @@ +/* eslint-disable no-eval */ +const util = require('util') +const { stylize } = require('../util/colors/minecraft') +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'servereval', + alias: [], + description: 'Basically eval command but without vm2', + trusted: 2, + usage: ' ', + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + try { + bot.tellraw(selector, { text: util.inspect(eval(args.slice(1).join(' ')), { stylize }).substring(0, 32700) }) + } catch (err) { + bot.tellraw(selector, { text: util.inspect(err).replaceAll('runner', 'home'), color: 'red' }) + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + try { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Output') + .setDescription(util.inspect(eval(args.join(' ')))) + channeldc.send({ embeds: [Embed] }) + } catch (err) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription(`\`\`\`${util.inspect(err).replaceAll('runner', 'home')}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } + } +} diff --git a/ChomensJS/commands/serverinfo.js b/ChomensJS/commands/serverinfo.js new file mode 100644 index 0000000..f7b9f31 --- /dev/null +++ b/ChomensJS/commands/serverinfo.js @@ -0,0 +1,66 @@ +const os = require('os') +const path = require('path') +const fs = require('fs/promises') +const { EmbedBuilder } = require('discord.js') + +// should i move this to util? +async function getCpuModelName () { + const cpuInfo = await fs.readFile('/proc/cpuinfo') + const lines = cpuInfo.toString().split('\n') + // among us way of doing it + const modelName = lines.find((line) => line.startsWith('model name')).split('\t: ') + return modelName[1] +} + +module.exports = { + name: 'serverinfo', + alias: [], + description: 'Shows the info about the server that is hosting the bot', + trusted: 0, + usage: '', + execute: async function (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + const component = [] + component.push({ text: 'Hostname: ', color: 'gold' }) + component.push({ text: os.hostname(), color: 'aqua' }) + component.push('\n') + component.push({ text: 'Working directory: ', color: 'gold' }) + component.push({ text: path.join(__dirname, '..') /* if without .. it will includes the commands directory */, color: 'aqua' }) + component.push('\n') + component.push({ text: 'OS architecture: ', color: 'gold' }) + component.push({ text: os.arch(), color: 'aqua' }) + component.push('\n') + component.push({ text: 'OS platform: ', color: 'gold' }) + component.push({ text: os.platform(), color: 'aqua' }) + component.push('\n') + component.push({ text: 'OS name: ', color: 'gold' }) + component.push({ text: os.version(), color: 'aqua' }) + component.push('\n') + component.push({ text: 'CPU cores: ', color: 'gold' }) + component.push({ text: os.cpus().length, color: 'aqua' }) + component.push('\n') + component.push({ text: 'CPU model: ', color: 'gold' }) + component.push({ text: await getCpuModelName(), color: 'aqua' }) + component.push('\n') + component.push({ text: 'Total memory usage: ', color: 'gold' }) + component.push({ text: `${Math.floor(os.totalmem() / 1024 / 1024)} MB`, color: 'aqua' }) + component.push('\n') + component.push({ text: 'Available memory usage: ', color: 'gold' }) + component.push({ text: `${Math.floor(os.freemem() / 1024 / 1024)} MB`, color: 'aqua' }) + bot.tellraw(selector, component) + }, + discordExecute: async function (bot, username, sender, prefix, args, channeldc, message, config) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Server Info') + .setDescription(`Hostname: \`${os.hostname()}\` + Working directory: \`${path.join(__dirname, '..')}\` + OS architecture: \`${os.arch()}\` + OS platform: \`${os.platform()}\` + OS name: \`${os.version()}\` + CPU cores: \`${os.cpus().length}\` + CPU model: \`${await getCpuModelName()}\` + Total memory usage: \`${Math.floor(os.totalmem() / 1024 / 1024)} MB\` + Available memory usage: \`${Math.floor(os.freemem() / 1024 / 1024)} MB\``) + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/test.js b/ChomensJS/commands/test.js new file mode 100644 index 0000000..2de5623 --- /dev/null +++ b/ChomensJS/commands/test.js @@ -0,0 +1,35 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'test', + alias: [], + description: 'Tests if the bot is working', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + bot.tellraw(selector, [ + { + text: `Username: ${username},`, + color: 'green' + }, + { + text: ` Sender UUID: ${sender},`, + color: 'green' + }, + { + text: ` Prefix: ${prefix},`, + color: 'green' + }, + { + text: ` Args: ${args.join(', ').toString()}`, + color: 'green' + } + ]) + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Hello!') + .setDescription('This is the first ever command to be discordified!' + '\n' + `More info: Username: ${username}, Prefix: ${prefix}, Args: ${args.join(' ')}`) + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/time.js b/ChomensJS/commands/time.js new file mode 100644 index 0000000..b1931f4 --- /dev/null +++ b/ChomensJS/commands/time.js @@ -0,0 +1,37 @@ +const { EmbedBuilder } = require('discord.js') +const moment = require('moment-timezone') +module.exports = { + name: 'time', + alias: [], + description: 'Shows the time', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + const timezone = args.join(' ') + + if (!moment.tz.names().map((zone) => zone.toLowerCase()).includes(timezone.toLowerCase())) { + throw new SyntaxError('Invalid timezone') + } + + const momented = moment().tz(timezone).format('dddd, MMMM Do, YYYY, hh:mm:ss A') + const component = [{ text: 'The current date and time for the timezone ', color: 'white' }, { text: timezone, color: 'aqua' }, { text: ' is: ', color: 'white' }, { text: momented, color: 'green' }] + + bot.tellraw(selector, component) + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + const timezone = args.join(' ') + + if (!moment.tz.names().map((zone) => zone.toLowerCase()).includes(timezone.toLowerCase())) { + throw new SyntaxError('Invalid timezone') + } + + const momented = moment().tz(timezone).format('dddd, MMMM Do, YYYY, hh:mm:ss A') + const description = `The current date and time for the timezone ${timezone} is: ${momented}` + + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Time') + .setDescription(description) + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/tpsbar.js b/ChomensJS/commands/tpsbar.js new file mode 100644 index 0000000..115ff5e --- /dev/null +++ b/ChomensJS/commands/tpsbar.js @@ -0,0 +1,63 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'tpsbar', + alias: ['tps'], + description: 'Shows the server\'s TPS using Minecraft bossbar', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + switch (args[0]) { + case 'on': + bot.tps.on() + bot.tellraw(selector, [ + { + text: 'TPSBar is now ', + color: 'white' + }, + { + text: 'enabled', + color: 'green' + } + ]) + break + case 'off': + bot.tps.off() + bot.tellraw(selector, [ + { + text: 'TPSBar is now ', + color: 'white' + }, + { + text: 'disabled', + color: 'red' + } + ]) + break + default: + throw new SyntaxError('Invalid argument') + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + let Embed + switch (args[0]) { + case 'on': + bot.tps.on() + Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('TPSBar') + .setDescription('TPSBar is now enabled') + channeldc.send({ embeds: [Embed] }) + break + case 'off': + bot.tps.off() + Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('TPSBar') + .setDescription('TPSBar is now disabled') + channeldc.send({ embeds: [Embed] }) + break + default: + throw new SyntaxError('Invalid argument') + } + } +} diff --git a/ChomensJS/commands/translate.js b/ChomensJS/commands/translate.js new file mode 100644 index 0000000..2531f2a --- /dev/null +++ b/ChomensJS/commands/translate.js @@ -0,0 +1,33 @@ +const { EmbedBuilder } = require('discord.js') +const { translate } = require('@vitalets/google-translate-api') +module.exports = { + name: 'translate', + alias: [], + description: 'Translate a message using Google Translate', + usage: ' ', + trusted: 0, + execute: async function (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + try { + const res = await translate(args.slice(2).join(' '), { from: args[0], to: args[1] }) + bot.tellraw(selector, [{ text: 'Result: ', color: 'gold' }, { text: res.text, color: 'green' }]) + } catch (e) { + bot.tellraw(selector, { text: String(e), color: 'red' }) + } + }, + discordExecute: async function (bot, username, sender, prefix, args, channeldc, message, config) { + try { + const res = await translate(args.slice(2).join(' '), { from: args[0], to: args[1] }) + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Result') + .setDescription(res.text) + channeldc.send({ embeds: [Embed] }) + } catch (e) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription(`\`\`\`${e}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } + } +} diff --git a/ChomensJS/commands/uptime.js b/ChomensJS/commands/uptime.js new file mode 100644 index 0000000..f57c6ff --- /dev/null +++ b/ChomensJS/commands/uptime.js @@ -0,0 +1,23 @@ +const { EmbedBuilder } = require('discord.js') +const moment = require('moment-timezone') +module.exports = { + name: 'uptime', + alias: [], + description: 'Shows the bot\'s uptime', + usage: '', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + const duration = moment.duration(Math.floor(performance.now())) + const time = `${duration.days()} days, ${duration.hours()} hours, ${duration.minutes()} minutes, ${duration.seconds()} seconds` // moment please add duration.format() + bot.tellraw(selector, [{ text: 'The bot\'s uptime is ', color: 'white' }, { text: time, color: 'green' }]) + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + const duration = moment.duration(Math.floor(performance.now())) + const time = `${duration.days()} days, ${duration.hours()} hours, ${duration.minutes()} minutes, ${duration.seconds()} seconds` // moment please add duration.format() + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Bot\'s Uptime') + .setDescription(`The bot's uptime is ${time}`) + channeldc.send({ embeds: [Embed] }) + } +} diff --git a/ChomensJS/commands/urban.js b/ChomensJS/commands/urban.js new file mode 100644 index 0000000..399c603 --- /dev/null +++ b/ChomensJS/commands/urban.js @@ -0,0 +1,19 @@ +const urban = require('urban-dictionary') +module.exports = { + name: 'urban', + alias: [], + description: 'Working Urban Dictionary', + usage: '', + trusted: 0, + async execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + try { + const definitions = await urban.define(args.join(' ')) + + for (const definition of definitions) { + bot.tellraw(selector, [{ text: '[', color: 'dark_red' }, { text: 'Urban', color: 'red' }, { text: '] ', color: 'dark_red' }, { text: definition.word, color: 'white' }, { text: ' - ', color: 'white' }, { text: definition.definition, color: 'white' }]) + }// + } catch (e) { + bot.tellraw(selector, { text: e.toString(), color: 'red' }) + } + } +} diff --git a/ChomensJS/commands/uuid.js b/ChomensJS/commands/uuid.js new file mode 100644 index 0000000..efee29e --- /dev/null +++ b/ChomensJS/commands/uuid.js @@ -0,0 +1,84 @@ +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'uuid', + alias: [], + description: 'Gets the UUID of a player. If no player specified it will show your UUID instead', + usage: '[player (required on Discord)]', + trusted: 0, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[0]) { + const playername = args.join(' ') + const player = bot.players.list.find((user) => user.name === playername) + if (!player) throw new SyntaxError('Invalid username') + const playerUUID = player.UUID + bot.tellraw(selector, + [ + { + text: `${playername}'s UUID: `, + color: 'green' + }, + { + text: playerUUID, + color: 'aqua', + clickEvent: { + action: 'copy_to_clipboard', + value: playerUUID + }, + hoverEvent: { + action: 'show_text', + contents: [ + { + text: 'Click here to copy the UUID to your clipboard', + color: 'green' + } + ] + } + } + ]) + } else { + bot.tellraw(selector, + [ + { + text: 'Your UUID: ', + color: 'green' + }, + { + text: sender, + color: 'aqua', + clickEvent: { + action: 'copy_to_clipboard', + value: sender + }, + hoverEvent: { + action: 'show_text', + contents: [ + { + text: 'Click here to copy the uuid to your clipboard', + color: 'green' + } + ] + } + } + ]) + } + }, + discordExecute (bot, username, sender, prefix, args, channeldc, message, config) { + if (args[0]) { + const playername = args.join(' ') + const player = bot.players.list.find((user) => user.name === playername) + if (!player) throw new SyntaxError('Invalid username') + const playerUUID = player.UUID + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('UUID') + .setDescription(`${playername}'s UUID: ${playerUUID}`) + channeldc.send({ embeds: [Embed] }) + } else { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription('No player name specified') + channeldc.send({ embeds: [Embed] }) + } + } +} diff --git a/ChomensJS/commands/validate.js b/ChomensJS/commands/validate.js new file mode 100644 index 0000000..72f40c8 --- /dev/null +++ b/ChomensJS/commands/validate.js @@ -0,0 +1,14 @@ +module.exports = { + name: 'validate', + description: 'Validates a hash', + alias: ['checkhash'], + usage: '', + trusted: 1, + execute (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + if (args[0] === hash) { + bot.tellraw(selector, { text: 'Valid hash', color: 'green' }) + } else if (args[0] === ownerhash) { + bot.tellraw(selector, { text: 'Valid OwnerHash', color: 'green' }) + } + } +} diff --git a/ChomensJS/commands/wikipedia.js b/ChomensJS/commands/wikipedia.js new file mode 100644 index 0000000..fd8e975 --- /dev/null +++ b/ChomensJS/commands/wikipedia.js @@ -0,0 +1,36 @@ +const wiki = require('wikipedia') +const util = require('util') +const { EmbedBuilder } = require('discord.js') +module.exports = { + name: 'wikipedia', + alias: ['wiki'], + description: 'Working Wikipedia!', + usage: '', + trusted: 0, + execute: async function (bot, username, sender, prefix, args, config, hash, ownerhash, selector) { + try { + const page = await wiki.page(args.join(' ')) + const summary = await page.summary() + bot.tellraw(selector, { text: summary.extract, color: 'green' }) + } catch (e) { + bot.tellraw(selector, { text: e.toString(), color: 'red' }) + } + }, + discordExecute: async function (bot, username, sender, prefix, args, channeldc, message, config) { + try { + const page = await wiki.page(args.join(' ')) + const summary = await page.summary() + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.normal) + .setTitle('Output') + .setDescription(summary.extract) + channeldc.send({ embeds: [Embed] }) + } catch (e) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription(`\`\`\`${util.inspect(e)}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } + } +} diff --git a/ChomensJS/config.js b/ChomensJS/config.js new file mode 100644 index 0000000..12d7cae --- /dev/null +++ b/ChomensJS/config.js @@ -0,0 +1,124 @@ +const randomstring = require('randomstring') +module.exports = { + version: '1.19.2', + prefixes: [ + '3*', + 'cbot3 ', + '/cbot3 ' + ], + commandsDir: '../commands', // this will be used by the commands.js in the plugins folder so it needs ../ + proxy: { + enabled: false, + version: '1.19.2' + }, + console: true, + chat: { + messageLength: 100 + }, + core: { + layers: 3, + refillInterval: 1000 * 60, + + customName: [ + { + text: 'https://doin-your.mom', + color: 'dark_red' + } + + ] + }, + self_care: { + prefix: true, + op: true, + cspy: true, + vanish: true, + nickname: true, + socialspy: true, + gamemode: true, + mute: true, + endCredits: true + }, + eval: { + serverUrl: 'http://localhost:4445/' + }, + reconnectTimeout: 15000, // idk mabe + timeoutInterval: 1000 * 40, + self_care_check_interval: 2000, + discord: { + prefix: '!', + servers: { + 'chipmunk.land:25565': '1152778909901934602', + 'thefreedomz.one:25565': '1152807307256811561', + '24.69.170.247:25565': '1155838188586283109', + 'ipv4.fusselig.xyz:25565': '1152807355000565871', + 'kaboom.pw:25565': '1152807462836109402', + '172.126.70.0:25565': '1160601659098017925', + '24.69.170.247:25564': '1160600923467415602' + }, + embedsColors: { + normal: '#FFFF00', + error: '#FF0000' + } + }, + servers: [ + // logging means log to console + { + host: 'chipmunk.land', + port: 25565, + username: randomstring.generate(8), + kaboom: true, + logging: true, + useChat: false + }, + { + host: '172.126.70.0', + port: 25565, + username: randomstring.generate(8), + kaboom: true, + logging: true, + useChat: false + }, + { + host: '24.69.170.247', + port: 25564, + username: randomstring.generate(8), + kaboom: true, + logging: true, + useChat: false + }, + { + host: 'ipv4.fusselig.xyz', + port: 25565, + username: randomstring.generate(8), + kaboom: true, + logging: true, + useChat: false + }, + { + host: 'kaboom.pw', + port: 25565, + username: randomstring.generate(8), + kaboom: true, + logging: true, + useChat: false + }, + + { + host: 'thefreedomz.one', + port: 25565, + username: randomstring.generate(8), + kaboom: true, + logging: true, + useChat: false + }, + + { + host: '24.69.170.247', + port: 25565, + username: randomstring.generate(8), + kaboom: true, + logging: true, + useChat: false + } + ] +} diff --git a/ChomensJS/default.js b/ChomensJS/default.js new file mode 100644 index 0000000..33af8df --- /dev/null +++ b/ChomensJS/default.js @@ -0,0 +1,77 @@ +module.exports = { + version: '1.19.2', + prefixes: [ + 'default*', + 'defaultcbot ', + '/defaultcbot ' + ], + commandsDir: '../commands', // this will be used by the commands.js in the plugins folder so it needs ../ + keys: { + normalKey: 'normal hash key here', + ownerHashKey: 'OwnerHash™ key here' + }, + proxy: { + enabled: true, + version: '1.19.2' + }, + console: true, + chat: { + messageLength: 100 + }, + core: { + layers: 3, + refillInterval: 1000 * 60, + customName: [ + { + text: 'ChomeNS ', + color: 'yellow' + }, + { + text: 'Core', + color: 'green' + }, + { + text: '\u2122', + color: 'gold' + } + ] + }, + self_care: { + prefix: true, + op: true, + cspy: true, + vanish: true, + nickname: true, + socialspy: true, + gamemode: true, + mute: true, + endCredits: true + }, + eval: { + serverUrl: 'http://localhost:4445/' + }, + reconnectTimeout: 1000 * 2, + timeoutInterval: 1000 * 40, + self_care_check_interval: 2000, + discord: { + prefix: 'default!', + servers: { + 'localhost:25565': '696969696969696969' + }, + embedsColors: { + normal: '#FFFF00', + error: '#FF0000' + } + }, + servers: [ + // logging means log to console + { + host: 'localhost', + port: 25565, + username: 'ChomeNS_Bot', + kaboom: false, + logging: true, + useChat: false + } + ] +} diff --git a/ChomensJS/index.js b/ChomensJS/index.js new file mode 100644 index 0000000..0269dcb --- /dev/null +++ b/ChomensJS/index.js @@ -0,0 +1,48 @@ +const fs = require('fs/promises') +const fileExist = require('./util/file-exists') +const path = require('path') +const { createBot } = require('./bot') + +let config + +function load () { + // these stuff takes time to load so i move it here + const readline = require('node:readline') + const { stdin: input, stdout: output } = require('node:process') + const rl = readline.createInterface({ input, output }) + const { Client, GatewayIntentBits } = require('discord.js') +const { MessageContent, GuildMessages, Guilds } = GatewayIntentBits + + const dcclient = new Client({ intents: [Guilds, GuildMessages, MessageContent] }) + + let bots = [] + + dcclient.on('ready', () => { + for (const server of config.servers) { + const getBots = () => bots + const setNewBot = (server, bot) => { + bots = bots.filter((eachBot) => eachBot.server.host !== server) + bots.push(bot) + } + createBot(server, config, getBots, setNewBot, dcclient, rl) + } + }) + require('dotenv').config() + dcclient.login(process.env.discordtoken1) +} + +// TODO: improve this thing +async function checkConfig () { + if (!await fileExist(path.join(__dirname, 'config.js'))) { + console.error('Config file doesn\'t exist, so the default one was created') + await fs.copyFile(path.join(__dirname, 'default.js'), path.join(__dirname, 'config.js')) + } + config = require('./config') + load() +} + +checkConfig() + +process.on('uncaughtException', (e) => { + console.log('uncaught ' + e.stack) +}) diff --git a/ChomensJS/midis/Manifest.midi b/ChomensJS/midis/Manifest.midi new file mode 100644 index 0000000000000000000000000000000000000000..adca951ded04e0c5885c86192f877c8b894ca921 GIT binary patch literal 158804 zcmZ6!=~i1;x2_9(-&(6BaVjTv5*LXug#jCk!I&Z-TT}*t5Qst`Kp@K9+CIO|6>tgT z7S5fVJKOtt`j~Ro-apg?($t)N^#1m@7h}vZYX|@1rl+UpKY8``yr~`hzyGtR@BbiPeBdeYkao>cv_C+&>&q{d=TI^zBK_ny?^@3ZGU>3pdt-9PP3Q?os( zJl~TJ{_IWLKlP-&O7BDCbI-%s=iY~7UfZ90QvFHq!xZmdp7uOc`R;(%J>QjiKjM9d z_d2f@uXFxizxF(IigSCtHm@80SDqH{UVo35vR!`uSE?|sjp?3L+d%$duDjZknooMt z#cx~-9dw@cr0Yp^FwvW4IQHN}Uur$-Nw+V0A1*%kri-V&#d&)ln#k2!=t-yF_ocJP zy$>^7qrz*0&yP4qbExOxl)u}lh|;anlNdVaX(?^|T8aqQ09EUS9v z{PFvzQTJhkboN*1I^F!7ZLl%Jm>A13@}E9)tc+ni#-JS-W7s8Cuy2R4 zUXO=8()z2ObojIOLI;0j-D%%-uG8jS+c5@ouFQQ8hv?vRrZ4TIyNkbjQ=M^LJ?nMc zX=O2wy*kwsx@o_5jM}az-8~Qeq}e%a`)4mU=?$CQa9%Kz8rb~chqz9<|Ja)jzw1kv ze`m~TyDMII{01F`3`=i&()ODy<1E+Mc*l8Pf?x35M)w_Xe#J32k9*VNOiy6w1U%i1 z_NGa6Ehrd5Bvqjj>fsxFW`V{tniswsLlt58BbTg;2(cD{Fwbm`*U5# z6}CX$I5sdf5|~N*=3sx zEWVoVUu2$I1Lyj>cGP!Ue;0ViCb!@9%4@+tyL`8=Upjv9cJN!~Fm#yCu+IVhs*kDX z+t7Q~x8EPb)u-SX-%MAG@Ajw6vHJ7@yxCmtO>-Z5)LU9b4)ugR($1?i^(+xty4h^{tMuL240GP8s*vqrSBI zwl^)oNmXRnL+5e|ewW$<*)LX>LT?E?rDL#j^+UwG(7F5zr=ZX51Kk**jEpty4LwNtqs?yyH+{JwesYD zi~ace864Cm{>#D0D(9rFQsxQAag1-A!Y%Mgj(>26TqhrkVf_wW1b1uSBhG=Y(n%?F zlg{wLOE~cUN3afN_K*X;rGt0+$v?T8G2si`vHha3$>YAzO`|_w7kvbGRPY0GGvjFF zRkgL?`PAXJ_r#P2-|Y`(Y}d^hzRxz*m$jGqLlgc`U*;C|B3D?&=PrKg3!Z=*$Q{rN zy3%Lvh9hqX4y|+j7%%>MNE~&nSI>J>72BVobGdmIo3H#$zDb^-AMC-UHFS+`$VIZ= zh%1aE`(ox9j){2JM^1nrf@itG+#xud*l|fL*T>#*o(3^dJ)Vy;4sy>~{$AvJ@pZ;; z`-q2>$Wi}+#W z!z*%X_650D{FIRcA5>rAD`I_$&-6v}4s~|c4=4PDp2^|skMz+T$HkSojk)z99IU-g z$Th{kIfLgo2)VNPn?*T>Bt^igBWzT5_$$*;wgMeF2~l`wJ%jTx4B{s9PODiz|kFWHiPZ!T&oGkx6O|y;St7p zPrkVJ^j{HI1Cu{yE|3SjrvBUIuPe^qkP|p>n|PBAuJo4kvs4!^r4&K)~;uuqPV4zQUxy~hXsgv;yj_6_+m_DZW$ z*j5Y>|IWy5{^YYFM~K+8QOdsEBwxP%i*rxIP2>S$K%JQn9%El^F2)+)gC*n^Gad4& zW&SqCpTP6t=i*hbabI7J7{5o12)-D|etcXa2ViV-oNt+z_|+da$We`B@|8T`krTGd|U=ezTA5&K{v}FjUruzSdZbkMpWm$EFR>$>sDH zbR0U5F_J^eW9DD#utPmp=DmU)#S=J7dt-TAP4Hn}IYZ8L2p%H-Qv)dr<4pT-tMN^H zSMhy(%Ik)oD}!-Ry|p<9F$`Jy(x^EVcpyIryILz0;}4xE&nUn3y!u`Hd0%=-edRSj zV*g#PYh7}|Iqrsf(`Rxq@}P&8eE$KC_{jSg#-i?(K}=mu6g4cl;O(!y)=puU>Lzjw z^*(&ym^$&dK@Oztn{dnMR!{o0(ev<`|JU%@O}GLad(L$Hx;Kr~dqPg@eC-7eLgy#= zQF*=R;S>Ms|8fdC2z;Bz43~QzM))7hr54vyr!BzNb zV}P-j@HMz@g5M|;wPLy;mUPhDSheS2f@^Z#!2K!5g4ZYF*;ZtydZtuVEeHh?(RciiS zc=#0j-!Q&e#;rVJp|YIwxi)`aJjtl<-nJ|o8EXR)lG%X7*yTf=Xtnb)`uJe!CE5qECU|InPj%RG8cJ~qT}4tZ(s zq1itE&-}f$j$MeyEyfj`LfpNlANLMiuYo`Hm*Wb4P(n8BXDq6MZE|qyjle>O*fIn+ zzvDCWzC}5RvCHFU;9U+e_jD}ULmMlT_?KJk-!-hU@S#I^qe1DBBlkW(hm?n`@g8C zoUfTb9Q@Lk-ZRE2z8k}a@R2!C==p}+Ld?Kn8Pls7EArWKG_uK2)lcXizA&yI5_jy~O&wb&mRdU8Qy>5MaiWpH|D)^TA3Ln-_(|!q?;O8gE z+QJT3W6|qM4g5oldQE-Vm~_YS#t(BVb#JdS@K^@7f8?40+(%wP?~`#+qj3JFHYCT( zF%22^*fDgU1`2wW<6Bj?)~m9b2W<+yh8k z_>~xxJMZaH`WG>$bf$hC+cfWT0sN7U@cj#HKF(NIhz+ZJRyE%pjccY8 z;^{fQX#F}0m&42ECk0o4GyQ?FJFZ#yXPel)3+}VMhskma~jAlPuj0(5m&E% zCXT~PtN4i+aje$O#<5L~tK;|fW#tNDLc}+12G^xca_4jE1%GF}>*7YAk%x%)sev#3 zC+8mB&HU&&{tXZPC*LiCKmERo7qMh4*0!IiX*{2`F80Ll&<#Fr3|S&iuA$p~UU%ql zna|bV7x?o89y&+f3v^*FU`(ceA7iP4H{~=wf~mAuWo*VRxU7Y4&hU-P5}eeZImX&f z-5!Dm=l_%g-ie;NKHs)i!0(ocX&cm+>dx^P(;^mu>n8c1dZ=J0&u5Gd0zMekIID(Vq2Dzr&L$Vhq=bdss#~3og)#5P6Ty#Mm zs@>$~Gmev6jJfamUz||~24CJ&|1Wb6ZEc+PT-V4jx|-v&I$Izv)(hUlN75#?t!;7+ zb9QuKUOLb53tUg#*y}5JF61Wff0*Yxaa<+WGq1KcLR?O>Ue|#ufecbO!%kqMvJe8QbJ9_TSX`Jvua( z)K1PLox&;09KRd=t(?OdQ|%XkN9(4DW$GYo#n>N{@Y`En!5R3H@*Deh@dtBZYqK&j zpc@y)D)cLe4P%^p6q&?Q10Blw+JBC*>CY$N?hJps#0PJY)7o+oOz**2U_Rn}i@C23 zf8UUkXN=`Jrb#&K1Yc1<_;che+vFE=hI#xg7&~BIgkk|TCoyec!gUr zjU+@_=<^0A}&wGp>^$p{S<2hpfk6bkR&u5RL2H^Z~4mlZ| z5jwj9%X{=P9CMTL$Vqo_vqbHs85BX*rf2L<1_B&!6E$S}U z>D-gEtP%6OzC-Ud?PH%q;+Zw!1=o=Cm=6`RU*q>ReHML@oFZ)1;yPkd?45Fc`|urn z+kW>jIg4>%?i0F&KhSC5`Wl?wevBSW*jW3^2~B+4TznMX>DE!K840f1!lrU>;JTFk z?2NjsO%6=&JaDMZj=_j|2eBsd82d!@o+Dm6$148Sr8UPD+%~^b(1{bcq4FU4?&+k{{Y{T%jk#lcf<>Hdi;GcCdToW?*c!>Lix7> z*T^&K1ze;ycETr(H)#tSX?Jt5)=#0|h@S=Drd9mhUYvZ>;qTku>`UX%j3MF;<5@#5 z_LIdo^#^0gep%-4@IT^%Sk%XxC2;Xa#@x+FU&whuesG0s@=eH#kF3JQV)u&N6%3|3 z;+Xk}c?H)AUl%XNUt&aXjQ$vM!h7$Y4MrJP5^N%Fs_c_ujjEF4S!J?#^lTgW5V zD!;uK<^s+8(>r2>{a)51rFA%GkC-RU26=zSHPx~CvUTzldHE{5tMAwNjk-3^9ppX6 z#CP(oc2M_lPF!zY?qd9o!`gg?SgDO}ndkRh+t{W820XOORVh+7kIqvKlx zC+6e9M{ujY)h^|0F_yrs`Qtm{m_Ahh0Y2cjV%eU_`7GxGFN`ZKVz1Ac=##A0{~+0t(n>JWU*bBnU?NBpre4BZ~F+ADsd3es}737s0&=Xvh$NYqM{S*8} z40*xW&{N=tYX`Qf^NfQWc$L`K!Up0m8#_^AR<$~|Yi z#K^B4@A-^<#vX7{j4}HOaS!{&HAClh{#M3W&V3AbT$bUutaOmCqDSD%3;=liu~QS$`Wtg-af8*ugt-dCShuqwX2u0A-9zlmSt zu9)fn)bsF)<7#|<0G717dd!&Uu0!H_zxNTl`XWBi2MoLDKd0X^W@1G@fA7;@9p`<5 zI4lR*d%vMaKbG+x^TY@E#@VBs7r$7^F?lUxIMu;|{tqV8HC&=iod3)^!}g4+kPWQ& zVt?~MeE$R3;yP{OnqwLu*6Z)|&E*hzCgxh48~8ZJIkEF8e%tN)e}N^0?%gA#kU?)h+8?!ncO_Tg+;|7krOxVlAd?J*}Ku0{@$Zm9Q$(It2bj%A+3IFttSwbSedTn4W75qVhMoW08R5P4e6 z%e2UcOXL&d71n{33jKlq6Y}p8$1qe!@QPbs^LRttOEuwaqTbY%K8G_MBHa> zM_@0o`X%%1G59dfn(tlHXBKO&{XHb6dmi)THTYky+kiKk;7DEE!k5N-@IxN}Um}N- zAG#Qing^RYz5{X^dV-vrIE^jwE%UdufjwDg7#yXH;!l2b4Ujdn`P?wM$Oz|HASUhN zdxO|ln^%Ho^7Zxgn;&z{K22;|;5_yN7w7{V5UbUbvWZvmwhs4UXJdHC@dMYI=5Kvj zJ~RLRf#Y8CdFb^^o|hhgQ!Cic*!mK=1~|svW@{nG^D}J!3$}mB=Y#Tf3B6Ji|HA)& zaW3p_Pv>Esch{o-#rqn*^~ZY7_vaatvU|;jIq8$En?Lw}fa`_qaJX?xU76b}!yxB2 z9#N-+{MN;<(9*$pj|75F2Ukke#Umc%oV}HeNp40P~XNU!Rn9glI zrjKI$U4*y6a$3co#RO|%QUjdJDUbR8ckCf=&VeU$uMTyB*mVxw{PGs;{m!|?&M@&~ zj`!LS^6@$*e;b73reXFkNiJ?oN^mESi~3o z-D?eDd)Mh$Lk)1wAwK)Mt_|Eo{~2y0kI6Vhujj~gJDq?3mfu$y>jkfSxOfnsc+0u< zt6_T8v&4W!e!Id;9uhz1uR|OsXRHuYenSs~#kH@{qg?m|o&UzMo@a<_+Ghc)VTS>* zg`B~8ZE|wCfw4p^e1dH+M)Pqm(Yd*zW7aR_0P(hmA367QNj@ol;4=Cmc^&{c(>k_2 zfa_h`+}5wi-MpThSK&9T8wsA37vYVtvEO?g^O(*vxM+o3m0AMar#ksscTC6-_}Rx# zulVj7-I`B|uRrje3UyL-ENY1dIL0`V=7^b##JjWjXo9^UF?4ZvOU(*G=sISYF=v7=BH$&E) zp{#fOfpydwd*h7R`A~gFz8m2GH=J*rW0-eHC)|JYGj3R|6z{PKIBQPhsoF6yVq&UdGUtcBc3E6E%SR zIsjhZqUZTRxBweOtR%1aiED&hoZ~HjgW0cZCFOSSHBk;YJ=R#)`TbrE9MR(d*Q`mU zXOB$gx!QgTJ37aTU($m@@7PJ3DDx@!F>f=c*H@RRtJPU|-15mFy%}^HTyntQ#`RlX z>U9as8#kAEfw@!z56Xxf_(G1+FVMTbW6do$n3Kq*#s>T{a<@+d=m*|=ihm7e9K}6b z&b2<}Sbsml=bw0wdql_;Jx)J3BmT5`b(mA&xX25h!!hEag5PYAlW4QsshpG1t20K# zn#ghd{Ui9PAPZ~30w15yX9c|BFQEtJm9x*RKj3j>Q1;-^X>#fXUW_$r&3m}iz83f- ze_?!#-F$YM|HDgcFZga62H#7(m*IvMyq=HCJ@sMmGL4S) z#S3axxs!97i-#TLS?w~#IgD*$@HP32y71nvHrV#QCv)H__5%^eT+Ss+tR1yMX=fXK>UwmSPvIAtx(6_V?%v-lk>=@VyH}>xWOEOYpYq?ZcY>H ziI6SyDsSj-a+Pth{tJ5eIruK!aJ*}Bnm~w|?Io=WcN8W8aM-7(b8!^qCN5th3`f*}#j^p$Xbzr>e<^cNJ0esh@?$$@i z3nPzUjcmHX){EGyLT=kny+2;)>=3)SCd#qM6Jlo-A5fpH^O3tU$KY@HMPPT;Yr@5H zlJ%Z4t&kIVf1tdHuZ17<^Y<(2cl!hKRC^}(z4dWrm3wkMp6|V=4|Vm}7xk363%+Je zf}PEga;(&r>dAZDklVHAsWOo5*CL+!yMBH*Kz=E1C()aFTp!MM!A|Ld+Q?dF7Ms{p zl0O+w%yY_Z9ctAZV*f2Q-aYy>HjI*Y;E#c4=eO7StU*3GOl%>yL#FJr+7|za`b=L# z_K->6bIw}+kTcaAHIqHI$m^PXCWhqjYhKE?0DtR0)E??A?DIW%mS?`_^WTt3K4E;} zKXTG@Lt4T)(M9{>%ZLhmg}%L|KxD;sB!5zIG804Et3m=0SoHslrb#w z8)c5%jozw0BgVe)z4w*C=W#!^*ykE@s=p2VU4-q?C*1iG`R#Sr;W^_G*G;#?7V)&o zan2DB6*73gn!Gv0adP_>oX7Reo#mUjS79~lB(UPTKjvrBHk_>7t`WOLx8lv;gCApF zI>+zm(U~i!HL%GXc^o6hi_xdx-s|l0f{WC9rV1NVGIeWZ^sJ}c(c&{rGmQ`3c> z%=7HWi3j_E>PO$%hu;gHj$S8Y4Syy6hduODeOq0>!)A-*a?g;(-0cn>;4{pTfbHz} zq0_Ze)?FJsu=YK;!n}z!-HD!lTH)_)>dqGVg|(%+*6xmlS}fMlV9)R$bwK?V`b6gR z4jqYW>veja_HX5RWfUh5!~Fe@<33MkE+AJjmW2FYz^?WZL%}N??==tTw=j;lH(722 zhurT#y$%Oh{~3duV6}~J{|XoV#{aX#z0bTKFh=fWPB#O2e&RRAHd@Z>p3973g=1Kg zov}z97bDv9kl&r)6Q1kYr<^;5U*M1XMgC`8Tqz+J=aGArTl=_9LV5AKh{xv6+x&gV z`w8eVQua6X?qIm(GEid#cM9_|p{n009)0IxrWud?DrUrhwlKFg*TA>ZUL6@&3t(eu&{eT;7W-f?*a()61j2r6ZjJ`*ioLk>G<<;S{Yvk=O z2L}YEykGKw+|B#ZT=OHAobNKiNzcIEhpNW;YhwyGJ z+iDD65bM|IggJ+pXYH=lW?nwk83#U|MzHB9ayXY^Z7oi;l{v=>Ix*ht(-&j@GjcF= zopUR$qyL?f@4hC7nMKF)MX{DF9S&q%41LLc2lY?~_eH#o-MC-}0MvKH*;oa1~3-h#uN&-4DZSw36Aw`%y) zF*r1Sx2Sc@UHkc)x-WDKw}f7Ik!6CvgZIHTc#Jhu{pix##M)1uF%FL-uRgO)FQ?3T z)V;oPL2l-`Yw$?O2{*R?i25}0X)zVpU|uWa;X2~j^_m-Cm$gLc_#5WCSohaYjI2K{ zWMw>DFYKeg8#CEsC-CWbl&|tv<|cJv9Nl3}8Mq0X=u;CJ?{OSH6WDcayld_px7cbU zhkb8rMSp7!J;+$K5qV+w_5$mO9d8}n50JAhaGZE@t*3Zs5MPxM-v}=H7JpnoHpU%3 zE{7WT<(Y3e{uwwN;GKDWWXOK-3anI!DQm^p2EfZ6ertaJ5+CvS`BLtiId_Asv2Mgz zwL{(b3%+CC!~9p;fLFbT(tE{z;ky17e8;-xdH$C_8inqir+=Bp8+ls9JL2-M=-=}# zVB-qhqb=k$xlh|Y=KEjy-x%`YedLk!IdYyqfL`>)b>vqs`kXR25AlKj^>204;ibNR zVC+@$iyt`VCBN0jEBwam+uJw)w%@Nz>OOpKIP3oSN9+WrU%S2uJy?q3Hpk3$Qia@y z`#w^W98El+tC-Vx!guzi#0q`Zv<;u(XW6IVFW2ON->`ew9Bvb1*f$Mr(^ugCRq_Y! zt%^FsoaqQYVjN+A=D^GyVomBPIIoqmKN)B6?}&NkGC$yt#&B}0v`Ad-a+de?1SX5) zl^IZGJhE7s^f=O@Q1i(J}!7+U?+0Dv`9X<>|7Q+Ys@|; zj|v~_<79>a=%C*adPGrY&`8qT<(7j%oxS@)5C zVqDtzGp`kXw~2piC-46OuaTd&$o<5aYtELs_8|8E#%Gh{uGHcY2le+Oe$(P*jI&;t zvuC(#T6$PiOo~r_9B%k6FYp_1q%H{D$rP zz2|1nkif|bdJ4WO#@*mrVgPwkb1dTMgMA@67P*77!DaRr=11hf0PlKer|;7k08QsZacgj>JmvGqNE=tcOA;=^TDyjd^;EjsE2SG5j*u z4VmMf;@A4>7;;$`YX2c*&|md2{nJ`p*)HjA2e#Ib1HapphZu+QJtj^Rxo#dGy1=&f z3GzKfV8VOgf96_nYxWzi?b_%sPeKFo= z6x@kDqt~+YBvz}i!L3zHc` z1>Q4ft`8M?WYG`VC4Pxf_cV+3m+;I7Z0>c@dHBLhbOt6v*WDh5b7mj7wl%pJQV_X1H7-(-dyP1`)b)|!F!j}CHVgxJi!6!kluqeh-0=lG+WBOjKCVY^nBI` z-YbSJ(gA*x?~TvvqRo*jU{8+uLJYEwv`@c1N9_6zZjcwqU8l%}o#PR2a=CnOJa8@# zEarY1W0$LI`#C3L%|>AD{@cEYFFY9kG?7D+qg!L9rkn((#P?hH8+(T@ zFT)q|^dYv_e@_|PHSagf|BoR*K9j`6D!SC?H_%fRIrLp~BJN8_L!3`Pa;!CQy*mJ( z;3qBSUBoWy0Wv2Ocf{Q(FFA|(y~vZme)x;`kWlwKCid=OO%HarpRIoyD}yg`4U+ER z_6o;;K`!LS9(@nwxG^U7a|qmezY*8TnC3fr4cg3FAjaZ-GtQB@zom0n%mseULCwLi zz4l0*?{bY+e%qI8H2Q_kZNYJj4_$*h?I)MZ$<)`Ockbg#7tDdaCf2CqI{DTh{%qak zc+7?O;dbItuF;TTWh2WL>yPl4De}qLj~N@r2z|hOUQVQjNcC;b&pF}4IIngsutZG; zz9w^wjl2sy4DdU6FVz@>a)XD!f_f1v8-J4z5o^0WQ~Qk9)YUhya$l2vL+~u?0+M?H z#Ci$NGskbuyH=FT`V${p=$!r7u1NILjG>t>i?8$r;l)&Ng|`v>_W z+sj<)BcD4LeMx`8`l`+U{pMKD($DdSCF-bwz(@Fh zgBtUgI>oihXJE+2ZAoyU9LSJe07N*g&|>s9^bn)BYE zzgu!6@R`Q&_b>3xDfy_m3Vsv!nRfkNU(%n!Dr>UCe{!t-2&bYWd?%g3#d6N_vw!@3 z0ev~A3-9H4$e887eBR8%*L-K(e1u;av$TQS`G|9M>j<%fAA`+YPYiIJ<5(w$*<#-_ z@k3w2wIPwK#(f+3;rSc#e`F`O4ZhHq!e6mP_g*LWDPW)0^eY%5546`F@|trV!^7T3 z-(9POj8T{9H#N=+?}qOxD{Jn%bBWHcM6MmRGTeHKKNKZ0r;`e#UR@OPJ&L zGX``M^K;-k^Ao_BHSZnbw|gsj-U>3+m|tnY4F~jo z*uNtD#PzG>3t?aLH}5TSp8q-VotiWBbCKs{Q-z#<4SUOh5zEP8)dI1dQxo_su zty#s`G5L|U)K8J)Yur2Keplz)&6R&G@>%9?;@(Sbhh1Wv=4Gz0ByOc^xbbJ?{*~_* z`2RDt-zqhUyuSr@o8V3S$R9so3vJ{*FSSzkryuxE8*=|a>;vj}-OCN1P5bE39KqVx z{w+2LjxW=r(WZ06Dc4==53Zx7XB6u=CONmU%CUMcl|FZXT<*bZ4)Pl@MNVoPRrsUYy65Z?^e6-Z>?@5n1dh+6SBA_jUT!_^UZW`WuW9mr@gc z^ggU3_-Tmq{LN>J_@cJ64tu%AdToBM4yW*Ud0{!@Dcw-Ri-8sVeY+S>eFtBnhB6O@ zx4aM1dM)ZzI4@13FL*rFhyzDUIc|9W#WcsOA8TRP_|2f_-6ixhT=*}XY~NHltnYK3 zmhYX$7vwbkHu5@u*BHw(obx$8mi{JgI^NINQBJ-Pr(EY9V`tA>`m&i*IDhECdlB*B z;P!XCa}D+y$ei&fn0GH5`}*g+cgR)c;u*$W1xu`?DcZ%OeK3~Iz#&z_cR`5;v65FLF<7y*=y`i^YSMGEV3hxDt zm`0xKJiuFy7k}DLtiv$+D%kXdC-(#tU(0{p)-I<8n=odysyOo9g6}SI&{a z(WA^O)JW)neCwM$hI24>0SB;#JNSjYm(wwvbqSX7lk^&#AN&zIj4`m5GUU2N|E_5Y zj$urP;L3c;xISOP2Z;&B279j!>HurA8gozP5oaM=Z>*7bEE#|3k{Ik*UQ@%H$B7;7 zGA|c_sS_~Z`A7anm&7plkP;iG#I(*QVja2UHT=k4Mlt_3gWcvihkUkaKT6C@U~k6g z{hF7hJkLj8BQ1TO@v8pCjQ%92Y%pGX1gr-Roogrd=?@#7!>w(O)9*gO1>(5MHIDFQ z{Xt(i$+>vg#oTX=^J#B$)H1P&{ZS*PROt})r*E(kSWd^-+kV6t7<_{~#z64{r^mdH`?osp zFvjPT@Q3?WZ$8bkn{SzCzM&4CQ-%ZqV zug91x?;e54b2wm}F-~-kL53~zv|VzVJL?{P!*^+{k@Y}so-WB#jB(x{p8cgayqeUv&R?MGzTRguEA&ZC+LD0e8hO%_w<~#5av|qKQN<=8@VqPJlUoO zkw2724iS6i6(8U@@D{drAN}m_oD1x03;o_0+bSU|++P{&3w+UI@qB3uxy&`dd)^D* zz6dqx=r%mupRqBrojDDBg+Hn1>mgbmm60l1QV5VMUBO323fyS^oFZU4ymsMA>+P{f3s=Wa3A z+vYxX;+TFG=e=VN0$vL~@Sb|}3+yP51eVOFce8B4$1{x4u{alW25*|%%YCP7d410f z^H}CzAMh9MlL`H`z_?@R;2XE_xLh{_*3fgzr8Ka`0o;sFWP8)IB@U!ATq^H5Z^mAN z(T{?U)uD0JJ%3~GJL9M^!&ssY)z38fojzjUx`-96L}`itu}jiKf^L&T?H-hI|j4c!o*QU{*SvJwN~&Uz{PhWE8=kB_Xyz!tHm z5c|L-$GcKOcJ$@_?8bF`H2C}zoZ%W}@ftZ6*SV$78unhwIh*y5IKp4$+Oz>z6zA{8 zr@&0!?=WH*GLqjg|I+#a4&imfJb%Vgz83PQVa{(pQpTt4|H-#C;=9;9W=y&61-I-I zt~}nuD(2LUKDF}L@n)Wb*U}Q>mj8FL>p1#{^V13PUQlO8UJXar_`m&4&Q0FbbI;3K zVwAs)U-A(?8P85IK8?Yf#slLWcua4wxp8f5FOE;k#H_U+3m!m6){!3fb}wUCY`;Sm zZLJ^Pyvy;3al}0?#`t&q{h7K$-dTjJ97B__Mjngq&dJrXZWi})8XOk) zCW=kv>yDfF7q>h^d0c^!O{|^1_i1)Sdm(*cgchr>Y=**aR@GX3V z56k21Z=t@@3fQdiVy}~QN}SZsx&JwOHlN@DZH2$vuh+N3$K01v-wevZc(HHhWciQX| z`b3AR0Y^09NU=Raex==63#5Lm2O{?CYggnrcU+quOYp87VIPq>jC2kLJG|3(O^eu7 z*?a~-oRfM>y_=&TSLpAETHQ5++V3@-YJMRXc)$PoLSOp0OwK?aLmqGJ2|ahfl{Oe& z$$mIPEd(#5MdE)qr!r^2_wqbniE*PR^{P(9u>07HIj^;gA2^2l5^=I@@Nxah{4RVSy@p)I4Eb{nz7QA3)FmC}^1Wx`1OLNK^m%gp@tUmbOdrwT zTKD|?zfHYm&cS_g(I@tNAMg{$=6#)>m$@IVn{&FE@V#vJZN9tU8oR_>^C#t3ciY4V zZFX8h2FC38T~8q{+|%}wm~f3;=3C@Rkpmm!-Iu$w^p$hto*FUa^I4kH@FVBdubh`+ zzm*)f;3@YmX`m;ub4lK!96k$xeb^%JlP|T4F>m_QSNufYH2inOj>z@w9muO~Y~XnK zO`0QryJc>L{iFl8_BBqigZ>K#rnm5ldu`8gerz1^Nxrt8kvCWq88JiOIiuHUjgD_e zEOZYBZ7V*t&oDkMW><(^$G_w~=04G5cKw~QaGi95ABrh_Dg4hEX@6h4u|77iZ$Dq% zS{DXK^IS1=N#n2ivRujjdcluAcSo!_w;6s32eEHZI%iGM>ss~=ZE(ce9ru2;=i#0j z$QgXN^C;&o;##@PW%M=cD>#H_#C2t*UqoNrahPiz!MEz9Meo{kAzSo_b|<(tbOPPdsW9k&jHL%8=hwV2y6Zj5sd zc~uN}K71p1O55VQVc$2~fr-d<<<>Fu`-WQ2drHT+)+Bt*ny&DF`Ty-*wN$MkjAL`AK-MqQ-cj$UPMvL@sC8R?R` zNjq*~-=_5wGTz~1bz(uT@sJ-s9^slruR|WvzqL==g5!;S*Tf~C1@s!se8DH-oX{Qe zr$cJl;Q#5IL&>$5^cmRCz_|r#sGM713cl)?B6Pr3hbamVfa@6^`2gi51;mWNBEkyhf88TwmA2`+F|tc5&t`(1|EE)%(3rCaPBF5)21Kc zeK0e~vyT2Y$*&t#dcYQpf<`asr+n7$&%{u?eQe~vkqJ9<5v{Jll)(EL62xz2rP zaNXU=VPpiM+xFw!9S<-Lw zZzlO%J8!P!{Q8*dUlI%C>KSzAo)E^MU3w7Oj#?>n(Voy=3P({Idi%2 zUyMorf3uo%N3Y4=WZuUb*sGVg7W`|U*BG+{-f#Gw*X;Iqv4eS6^rwb7&uhM`eV=V{ zldof)7tisuhh)z|{K1j#gO%+HUg62e{hbdtrWAdUw1<61=_RpWoqKb{9G*BkC!dyQ zFT6H=#Nes*Y>O)AQ|HDx_j)w`El{_Eji@ul&;^(>Z?q<1&w6;9s=eQAigbDA}H%*kT&oX@B~_s-Aqn`>rV7{hpuLFkYEO4f56%yL@V0!hOntn-00#9iOpZ zb$Ub2@0gVNdt&V>`da6Ib1~vd+%sGO|MnrrkW+uyg>S`>JTc0(8B;3bgUlmz;|~}L zzmGh@80fPyugKr!hF#(h^JKC2qIg*YqpUZMT(`T&n%sonvd2$w8uvlxI*GAhYy1@s z)2sIC$G6rOmOYNo^weY zXMb^@-|@WCJXgj0HT4!a^jh(|h;fX!Lp;2Pr|i?a=5v!?C%zmwDr5;8d!LgWQ>H)Z za~Fs`kUkHqNPW`zXleYO^9rOIq;L##J1h*SI4|zFGb!ooE zJ>JP0o@Y^{p&iBsCbYZvh#w#W&pL^9_0{R3zqrRdA-0q^?5Vo{!E4SJ;~dD?u&!Aa z>tMzn-ZXe7E{Bg3$3qWrsJtC}rOfkpG4JqT|Hb|=^IUmO1`fw3?T5sCjC=ibd$vAT zi#<8XWv~M{nAytM*7teNROsQHJm$JT%SU|^7?z{-!$agV|NcNM5-;Un;jU8nR^%D# zT0T%;=+w9sIMtt7_m*>AFyK8B<=Je9%Yo1>`5pYfm~$1@$i_K{S*b6pBq=W?Ype8=^ea>^BdUr)nX)X(xRz8cRe z`vNBHQK>KHz0(Q#N{gJseFsL!*}Zqr7_d=7R(J-!NarhgeMH1I_yG(Bj@3__mvJFt zGqth&<8SVM;2DzG4gXC$nTygTeq;Qd#uo0Af?R=(8rM1)M1K5D%vd|=Kk%$ITB<(E zIg|eDzVUKTtSc0IjKy5L!^^s(`wW)~Sg@{XfM4qiuf@1x+;wsY_NWQlXIwc3`W^5c zT$Z+wH{`~*ex+XutKb!{)Za%>8PZ)>mE5y$r$MI~3(3yHM&J(|wgUWm|i*Ah@ zU`q}SoHoFt__GJVc+(dA;dR+>E1eP>F0hS!;N0vWJi&Za$j6%IxQ^qyeaD(6`cqzi z4W6jNS6#;yXWo^`z_LkOjYs&`JJ30>~2o4jh)l^$nmrE$;G6x#~5TzN&h)w z6gh`jaP4r&;Imt=`Hj!9Q-3oxY>nPd$p78HpfgT>3Qokp*=Y9J*Yy6Bi#5iXOVPJ> zWelN1_t5qkjjuUo8~@_I?7)k2nP8NAe!viUBx_4!e{kakKEvE%u2G7(7V_D9Z&I61 zqyKD|kk>K6Q@Jh_H})ss<>Y#I>dF`+_fLn8%#-YKyGCdn8Rz(aKFb{UjJxM+;WNQ6 zuUB$EVxHsR0Ay!8a3$kG2A%=?1a5aZuf0c~lY!qFU(+?U zgX>AaL)t`7`lm5wm!1-FC%wfMUZ3Zir%~b?}9rx#N5H- zCN^>m)$hu1guWqmz3%-SvT)rA{{A}OM%?OvgX^gx27@(i3$LdOa<*c-n4qkrTAF_oCk*lkwuet*c2@=6%7C@htXC zDApGRhED0D<=6{{F-GxbzIFlkXe0a0pN29A)Zh=+sfEqxk)%6xMf{29@@$g7*Wq{O z)ng7)%(`~*62E~TLXVLzks~_~tR1S<1Y*T!?Z~m_?cH^W%+tkvP(Ei6-s2fG=#pAd ze26=6p$~@*l-al>Ki4^zzF@w@Ue&1$&$D-1@D|SjPrJl5F~{5iJZ*i3{g^j2mmS&9 z<77>9ocEm1E~sIe*umVbI|t|W&0pk!EBJvi1h2Wz1J7wD7Z3jl%v-Oj3-%)m&K`k7 z^?Bp7_O{>ao})GJV&Cu(y}AbL^=j}{`k>DeTh=*t7!K2q9H(nI%=I0oI?`s;^o}EX zM&!uBS4W)3Ji==YaxV8TGS{b9$-TRb53bNI=FN`Fn2n#h|6n}hT^@>9LcLvq<3CKI zL$0R|-B0Th{ZRwDE+TlW7+1)+4PJu}|H$`im`~_8#scMb@0kkNGC$53$vR?RuISaf zudcbk@shPi=A^Ax*}n2L_b1w;MW1<}E#`^>AA#GV7I)3L`=iKHC+1?lS;z$GwwLJL1=_?G`ac%oQ`qBwH zUjmEr^V-LMawyhj_>96d$k>gKa&`;9F)yfs3w`R8c z%YHDw<2r!{eBvw5+y8S;)j5I>ywssNj?YaOU+zO=PsjC3;@EiKox4-+Pg8j;u5Ycr z%6W+RDCX@Ve#v{{NIlAjj-#k!BX9IMv&FgMIqK><;&A5Kz=b-F_==By;%{T<W1FUh0qd$4{wYFy)=I&-}raWMFRXPndH2Ft`(aVQ7-Ji|6R)Yt8~d*AB_ z-x+tz58CuhSSM@E7(QimR|J{SB}g*HsspZ*%>q-CQsBk>AeJpB?gl zxNDkvVwPhsKmRN6Gfa<@dM|Q6`IkL(tighJ!p_)&HS4ayinZa+eGCzQ^da@cxzZwI z(nr?UBj%(U_-c@2T;VfvGB}NRDrY#B6KXnbv&i2|9`l&#yjW{t3^v|*Zn<>@|99=EdqK!ia)#G*{RVy+vRshk zPU17p^|?-2Nw)t)yzdpyXAmUB+D zW6wC}bg?!xa}OALkKE)pj{T?t_Q<)pUhYkhC&+VhtF@_oC>Q(OS?2D1Ca!Ce(m6hA z&W{cgb9nafLMLL%y@K2mC9sZt#c>@SJ3jK97}E%NALa8^{Qe8$fmfqPqb`ks)H0F( zaE*BGbq@yxEc zmYf`Obf3T~^E>t-;gaNYBgi#~@z@Z4mt)L38_XFfr+JvNOoL&4!e@%at`5|K>6HxcX1~6)ct&1 zuc&o4$-|Jp&Wm{meWttSGM@3OuH|}c5`H8Wtof{$=+Wl>=s32Vb__)=1{cY@>dyVb z<%RY%u>*ODKOt+A@p<32b%rud5C_E77WOr#WzUx6+7pitK0`KimG;1p_iz{o{ax!3 zn8J7DlQI71o`}p(*rh`bc+2mN$GM(k|K`je!8iBZ|F;V-8I#7gbF4B(!CBrf5P6(j zWsR}QXI;Mc`G?>*U6F6NPH%>I$$H7Szr%f;iut|p$x}FO4NjJ`oGX!YjPo1JXU}k6 z?d~&IMtC13Ptz~zFTPj!V4^qj&Yo-pk%Mka?Iq)_rBTZ!+vICRWL($Xku`F)uIA_{^J0 zK2v5e6#0fVqnz(}yq6I_i}Bmvkh8^wa+>4vjMLbELqBQ2pU%-MyL%<$AKC8Yf_unz zDZf@Tuj4P?JDZNb#qSE;t`~8fQF>D**MdX!3-{qN9$<@*wHyE7jF^tQfH@pxV16(^ZeQLaXgt$~jxBrueHypPS<)wZ1uLJj%qN4) zQO@LeqJQg~%j6rz!SES!0iVg|^CXSeZ}fS3#M@xESYPe4JL8&No-ihR?E>@4oYslm z*e{+V25ud9_^&!~4zjqPE`76{dx4IzM*aQ`??d>D`+FN#^V$>E_%VkXI*0Sb&<;K> z&x=jwz&mk*vA^f@De~B&wh9~8=p{IJVvdC@uCIt^_G$zBW>a8ZyYM`ekXt{o zccq{0VJmYHY#Orr`&Ddk4yI!7iz&Dse-Eq>Z#F&@e#-ATKd}=Zgp=<}j2SM1vt!MK z`$_EKHy!eo#-psK&>?+N$5ti2f`6ZTm3#)z5ICHnuPFD+8Td}7kbK zUw!X2co3KBR6jA#v^K_9A|Ggi#jo>cE8qsd^Le>)n`>o!PPM;Rr#{c1xEC+(;V{Qq zf0gyx8VpVgtjdvd#98L?BYv)c9e=+)1{YHQ+#sKQ2r;cpaxn2wpH5%EiI`%YVw!~~ z=J?zkV{bFZN}nxv!)L|=*J)l-D-4kDy4E=O3q2h2z4%c-ZPvLB@a|eEpVwesW848t zf#+iXxO4(0EdI5n7sn!^~gEFe(+_R?{CTBCc!QBg+3U2k*b%F9a)H3v4>E^Mf{BCO9qdL zW%sO?ch#Y|HHIkbI(4c0FW<69f$O;CN&SrH6Sy8c?n@Qp@?e!5R(+`#mF{zz&>>w`tUgt>i&@0j=4eQM4x%xmT?PS^E~O2{NMZ9^SQwd*HJd-g-m0i67x-?MT;}xWzBrG2BX!pf6zc=Szun6f--ytcHVZxir(%pgPWX`H0UyE9<~zt8c_?;C?yKXxsP{GA5GTjL)xP}| z?7aLPoPmz%0Y-i|HPaXI)A(bp;rLl^5xAp|o@(SI`Ye7fCes@@O4*Gk!J*jNT0tFK zBMrgb#!J?lr+MZIE6gv8W98Go@J08PNKNw%;)#1HUz59)`HuDGv2U_*<`&xpUr(^^ z7a6!#_@4D<9e(v0@5Qqe#8%|RW$IcvMp?m1vEHpOjU%&o<{IktD|ai8dy`-D`7JNG zmi1YwO#E=osc~|g&szLnJWG^4U~*cmlgs2b^0_)O#`#>dk6_Gt>#Uf+8>tpKESy501KSsT2PaOUW5;6NW4v|V@f4mj z--V;RuPL4}PRt8CX;b?S@|0tC&m}PDGwE}^gH2Yct-CqEF|kYE_L;-vBEfa!xcC|4 z8Oc83{RH9f*uy>GPT-hX=1v`#c-;i!VoF|7n2iLgPPCu82 zueqVN002! zmgoGzwQHKM`K{|v9Y=-#-P1GlhR$4{*BXfaiu2o1o15cw^|b$M=r6G*IQ=!2@n2ib zYa5T~u{#!ZYmWLC=YNAvzJMdf8T}Y_4hM(-$}@7;HMo=;-6KhEcFf{+AN%`krFFhH zM)8cX@Z%+7G_r@xJ}W@Kx`AKr$jgmAXT-J=_!SRwmFwH&W}p47Z0hUJm7dr$310H| z;Uj-?jQiH=m-=53FR^DHi}#lsTjd%s6!X{4hc)Q?ut#d}viFl2j|RyfhB&5-j*9zd zqUW&3?;CvXvkT0dXc-+Qy$4kNe+vpUpeI zo5Tlw{+j-J0w0SP>o#-x4RSHg!80zi-!#cb+^<>8b$H3Kfd%-_d^qIeT-jH?-h&eN z9WnNJ=C*RzALW=T7i)LzsVr^- zpUua-c-n)b;(5u)jtwJD(0fU*kej?D#z`HPZkdaD#sA@(*iPTe&n(5)=q>1X@(X*A zVdKD7JbO={lE1}~459PS0!>E=3OdblHC=IVXMO$c;EAxJq4D zsjI}UHT57l+YoYrnb<3<%{^V__Fz2l-+9!R28b_%{Eyxp8`sPGG0pHl_K3X_oX5cz zQxzNR(DyvUm&AiP4$q3sc?Px28eC{@WlzX+hCMi5{iqA?t&Um=xw+>qc-(zi2JiuJ z5xoy>#@Mqh7{6TT^Iv@~9{P8_H*5(%XorYZ;j`bM>xd2HjbKTv*$>9fp>y}lWqu$q zEDqGK`9ar5FK5sVm}1}Xm?NG5mw^Yc=(>Wi16br)1>uWT;()$mkHhP`-?%+(dq2(Z zay;-i7Ylh_l{zAx|9QkUg72yM#=)9;m%~=Tt2*8%&sP`mJU`YPVTZKFb;+Z>rvSSZ zJu>3D&z9Df*21sILqlF{zRhoH_^@M>^E%v{?U=>EJfE8jQ7gr@#moTM8s~ds1p1Ht zcINq8UNSF-f4nbFJ`A5fCuX-<*L3_l=LWYvBWnX3Y5PL&?!6q(la^c51J52qR$;cgXL4V#YW3hmuF&;=rflsgf5FJ7Y~Edi8p- z?$!E4-v=Yw(|KI?7KnbEHq$?bIgflqKQP8-tdifo7j2k#=SuMgFNw?y58Q>Dp*FBVNd=4 zXcnv?%V+*}y^|b33<;gI;6$I1$(SM*nuo2y6IF1hy@&_iH)_0%=d^&+=s#`4m(I=g zV=vZFr)%yzV0=--^`o19;=^ZtCoYv&S>cvd9$VPHFIUu(0C zw|NX(#I*{sdKp>79=!+ms|uUC_k0!3F|R^apZ)H-qQJENn)|0Y2Qkh}pbvQLtFLPp zdlUG1#9a6{dN}xZ8o*yBcyAJa*z+`W%ift0H<3O25a-)wd}s9F?JI^Y&=We2e%chD zx#prD+s?ns`=lCM8;>*3^drB|z5%D92kzwweQS65{EYsAy7w7k;@f8hDWm7uhD&dl z<0U_h7#w~{%-`gEj!RiO=@82cUrsgh6JuTW=RBvSo+@D1UMlD2**H1A z&vR|Lb%J&G##ZOIy?+Ot2TzG9o@X68zeA1*K1c4f0=|6yc$1#QTl8WsRzo)9ig8%~ zf?v}(=a+j~HyynlT6gNq8sxxUT$6a9-h$n+)SCiv?FEE}Wx=@+?Q z%@Hw1n>h}3!MI}VANZ{}Gj7qV4*57=*i$*_4W%t`R_A>1qJ9&5LAX|88qPeF^T^-e zbkplPjztgZLx{N9=Tc1pAuDe5lV=;Tf7? zljTzO|C548h=0K)^Ni7Fy^9ku<~`MnN&gF9vA-$*$`9U)*X?cD%S0bMTZnthh=JCq zj#C~uM6P@44!NqkMpqfl3&n^1Ib)4A=_d7(v1JEYcZqBJoX33e?MjZzkt>tKi3xqd z7-KGB4pEFdKUhrPnabvjgOaIoF4;-2#a3FC3cse58!6)!M&mAj5!Cm z9UBK%c>KY1&ZW9FgIuGZ`&?%6u?{b}&eOb-H_$EiC^-7-8hLacI`F<_ZFR}( zhL`#f@8tUtuUKalI#ZYKcVe$?iuJ13$fo_wBRE%@p;l41=6L>o41QT-46f}M<9!7F z9p&@x^Ef?*`H-~A*f+SY){aha~ zpPF9tSuwXBzNB8xzs>U@@7Y5KAIfuU=sNHY50LMtA;#pMr`qWFRj%2@#auP(X#>B| z=FXM5w^H{x&%@Z8{gLG6utAj=>vQIVlld(%(P!qQLC!61nMZKn`S8h@3n+!nyY+8+ z52qqm;9;LQO5e^}DdvojC*p&7yL{uGpHqzYGrXtH8rX(=K7v!N0jZNC?~*I@Ut_&G zl{1SqvQbaCzEm3;OO4<1$U4Vjm$XGr?6V;+xSs2lm&wo7gKN+t@8>(8SHyGG%w@vI zqTfVsR4((n@;3X%1b2&b`udDN_bT0cSq#%}5B$je>dBsk=Qpn&L#J}8It9=#+q!xaA z34a}uv!4({y1vQ!`+_U8Z#rINfWLC><2aDned!{OI6q$IZ)55_d7C{CWoC~~pO5r) z9)PjMeM(~8`}FN!@m%qA!g0;l6;*-&#|M=^FK(eXMbCZ%@yD zzkLB@VvTw9ej*o@Yn53nZR5MjXb$SNJJ?vxx#h*!V(!4b{mB!-LiT|&`gLx0oc~#$ z;yo$u2^d_^eZH)9xa+!Za-TS^)!m=nd(bZ62%n!o&)GTTY!__L`WK!xihq)$iCtqc z_)AMq;Y?%`mxt)UXZX2Rf&RVRCSIt4v(FsRFLTfQu07?bP4X_{NxmNXl6yUO&Ktgt zE$ke*2OKQ-aqj4Kv45R=))sNI7hlMI^=Zzb?RLS^1!KNuy~G=8i)nmxHS879GiLj4g0c$H(P~ zG2Y2%<*Ud^@TbU0xK}rHW1a^G#yMt*tBa30CmhIr3&yi_^?hG@LtHYZeh>D%#v(86 zp+4+SvKG>7#a;`Au3R&b)~Sa=Pvkn(8_cQZJi`4Z)rWZpd+xJuVAhd3@VpIP!Dr<3 zEqtB*v|d>#K~yulp}?96zB$Jlq>dl#a=r5|h!#re`-$Seow^ZVpg zrz4rW#dDF9xz0GStNyfy^D!lKvq*dv7vU$2K`toqo%0*pU{<~{_uC}TaII=Fw~^Nm zgYOs@bAdyg!}`;GMYiF>;nj=>b!IFHUBiPr)JgOr@^~M?Da9IA>xPh_=)LfqPoCjW z*a3Ywzo`E*ZxL&)d;a6{ls;|t@)Z5aBTN*a`BANm`BzwJik0u@f~|EUhfc|V;&{WJI^^5_&o4K zu82Lt=F|rvr}MPnBl_XSH=ZjKGFUIThm`Zu3!LA+*bX_O=g)J4)Rx$1fb(GIz*e_U zTEW*F_@De>45N+=yq{$bmCGZR80X1nqHY+e=Qv;Cn)4;D^(tfC=bjpu)iuwU2@Vx& z>)a!7IPc3wUe?+WP$6Lt1 zM^Et`*r;HC^9}oE=DNg`z+mhRLVii_%XlcRW6lX4dT_m_IvqrIIY|GUVVv5>IA>n7 zR??@a2e7ra_Zi{%Oj;*4)ycI7Ic|pkw~BF^>m7orn-Vh9&qH?+hv%_R8NH~}4PL<= zU~(UM<@#fMLT>fhreplienBCtz5PArgYlDCgQV>jIKTUm+soE>iL=?R*wP+>HgGOo z?lWc=+!r|F-ncww^rd|o#4Fcd4T`#gYx7wk#!BK^(euU!uwTgGoRhdWe$r=(+R-}I>zjxBoJ;enB1XGc z6VHA6ns=oMc#Zo{&{bYfs?D14UFTcoulU^B2fKNVR7a=khw-HeblBZ9scRE4<^C5{ zY~a|)^TRjbiHMV)=L4V9(@87HsD9P|75=8}UXcSCCu-Eg;^W|dGj*n0aV1H%zNKE> zcV#Lov!+{J-8BW1QWFvaAp}AQ2tZ81JkPUUBOk#Z`F`K_bIAO`3J4;OyPIv>W^V3o z4o^`t!#lL{ee5efYKnN+du_cNQn||QQ+$7Wp!zc9cSSt!SSIm7^KgB)wq?I!+vm=8 zuy^yx{rI$Z^r_iTl6ptm@S@MzBVN37jS!g=A8I4^yDZbc9c)gUcMsG%UYCf;*sGFx zSF>Ia42VzarDcrVqm%D%knh_8e@%{=x_6nc2XA8gkeKy|eG_8L{h;P2)v0muI^$8M z#=~#1w-G+`9y`D;QX^-VeDMIBKShp+^SNb%IPnl$HxF%I5m;7vA3@9@*^#$KIKtpK#rcP=GerbQE&dY}3H!-_|Y~}t#a$;b;47MDBe{pQ;Uz}Te zL!Nu!$GAhe4)gvo&zC>tf-m59mRDmP?S7U1DeEotU>;&|}w|@H$9AlHN zk*Mpwk9D3lL;sOQ{G0o@oTthyhr}SQeH$~N$JmOPGe^n%AsDld%6^@B^(j1YIZj^Y zf2$wY@AUD%72;XPR>x3%vHjC#Do)vNKnyCctl?97#45XgqOZ)K%_qo}$T)m#e(MH| zyN*9cOhIhbuE|vHW(;@4_xGz@OG6m@-{xlm&g9ZY_*pf8(-k#Z^r6Am3E(3{209Q2KiWvYl816i*@!6vF?_! z8SAUpE%xooW%{j2bSPfcA@|NZuZnK12Qq{18gBFqPVFx^(@*v{{=)f*m}u4&qf_th z;Lgk3p|r;w+Vh#WV43x{@XZO&K4s0@JsP{`-#$W2$IqM)8bRVhy(tWz|FTBUPka>g0dckdYob3AJRF7O%s0OzH`A+8^=1|1%`Wlp6H9siZN8sF*1 zw&2{@vGWf3*gJ{kMAkmr95m}xm3PF5nBWXRwO?dky9XqalqA&18_4|)G0o#vk zFdoO>2M>z(EoAFFPoH*FUM!4&a@bqc(L@n3M8bF=6aF6FLJ?$1)E z#EHlUPKb=Icr|Y^Fkj~j*m2ut{JiJi(Lv(lXY+OLMf_N{S%=`fMXgr>M%`!sj6O~B z{v7x)A1_aPK9%#1V*1!N?i@(tcPQb`trB zjSXyFUXc4;BUgW5N1n=ga(VT%Q{xS5uzQ9w--GkT;T5ri`2%C5yC0uqJ|@qpJJy)f zo-qt^3xB8w?~A#G+h4YJjUL4x`#&G|O!>@fVjlLfW}neYB;h|hR-%yms-`Z~8HKY%?2(>|A4GG&aldh-CUdEdS)b*enQJI%br z81F}p{Lj0xtS=ay;#=U#LL5{s!9@0dGG6*rM$nr!*`=@Up_%|o)>Lvm**I#1|IPFL zF0by9zGgkfT()*C&n@yD?{IZ&+?~+Y15E$Uh{uPB|KOT3f}F!ajMJP4`@DnAbz*17 z&)(E>jSuxckRsG?N!VKSL9@^5zC%T+s+yy z`3uf4RvtZL{->YtEP3LMe+P&0+4^_;bPvzVOX$ab`rWdRuQ;Y(^5_}yl=W}4Cvn;M zWa3_H7h(6raq&fej^E9*5*y)DIj0x@BcC}QxGz5Kc`yBclhpM9i={`LW6bWeJ-3>6opb!XV$yzzLu`&Q z*Z9c1csK?*q31S+C=Z-NooHeea?Y+tcP3VmD?!`zyasq0e}zr;(s#F`Tu z)j!sAR>a#iUvK;6?E8#WU+Ug(xf1)UKG+Sc`jIS4DuW} zELYfoyd+kc0~;H})-O6W*R2gZe>{3h`}E&CNQt{R!v~KJBsK|lcWJ-Yg{a)n?i&dP zkgq%?FM3}Q`=ja_!basY_9c~5=3Vwr?l1>RUcTByr`GIXOu66So;@}Td{$d+){)8~ zx)1~8zuMec@m`;KezrJ&;Jz}sZUSy(-je4YkJit7M#p&-oMX&bj)+&ozr;M@73VGR zeryMhyXdQNjQ1#h+&pkGUGh#1~cIw>z^C@450@wQ{~0)`WNayL|50m zZ`@$LZ|7UCCvmnexE7b51Mr;JJ+}NnPQ=`(c6tfEtbuIKP+pOj+Z>_yj>E5VblPNZ zsrW75rs~*dh;MrM%uSw^{`2ZMt@-19G}J2(-+{C8l`-0<8Rlw3_)zacZO#O=bG}F1 zc?M|)eQ1;NrQEhnJ9|^emwE0nHgE-gZqd!e4)GiDE^$v;L)Ja|AWrtlIeMq9_r{2e zS>E#=`er<-^W+>*8Mr?FiaCmLUKz`4w2s1;D{Uf^T$A=ptbWYBhUN{UL)Mez2MAG|JN|K!`t z-cR5VKZ#vAW0H%E zWx+=JuMYOWk+PfaH1l@G+wN;pPV%fd``83>Brh3m)Q$)Fed@2qj}?D+^zHsl?hz?( z(8(0v7qjMqsNEI0JC9OlQ?zpe<~Pavaz=tYbmoE?i|eah#@b+7>_s0uFMH+0tTL;) z>uN)s<0}2wkMic;AUG5J(55!2Eu68}qhGwi9oh%@$oqrKb#Irpb4{L1`xVpZC)}MF z0A4uf|JJ^kM1PKH8NB9B5$y45gjgF{i&wc|oi%Fh`~crWEz7b>OvG4<^MHLgK;4t; zPK;FR+tD|0M{J()d$xH5-Y~CZtnEDCczzw3f~#<}Ig0komg93B^ne`OZYME*{JM5j zeSNsTu&-WuSkKM<+n!ZO9uFH3M>#hlZudJpn>dvCy)4Ve%z?y$vN$DQ0_Oy``Z8-E z>PM8R&)y)O+=m;~voYW?9I76bH!_KSQp+D(^L%rBTf?(HkNZud7x(y^(-$l6unYNH z`GSG?i8<^en8b!$1Eg>AQMu@V2V&t{xW|1mBg9hg_@8|~f;;G|`~KX2S7zvg^BMK& z`B!6W?|Q@rTU{jorF`T@;s||3#u57_-q!w{U&&3g#4Gm0_|&s(>iHvm)2GN0JMaQy zw4cU**(WW3D<3dd2AGG)F>e?fv0C;xo71_*K5pS>_{Fm!+-FqRw7d%h-bzmG1YO>N zH_x;XdnjjPf%MNli_49UF%o#yAB>W7!UvI;xAtAL##VD-;=hm2v&K-Sz(G^HB)rT$ zvhg{NQx4WQ8q1=WG7BG&ueaUEei9idr!9OVYpZvSCAk0AYX|s%Bi%M{JOSe z9R_P0-tZZ9H3z@V^Zq_u=2(nLn{yNKf7>gyzvA=yd$CY;;Tnv7hPv1CWMU+9x{jH1 zt<)n#w%AX*rlF0D^W8aqw6_6pt-h@hryY3i<&L;zfZsVwk^2JJR~h@d;63XtvPV0d zpk2`4a)IwcSK3GQIbckzlAFw3sW+^1q5Ig%Jv_C@`{rwvy?gTX2YkPr@;xy*0gjI6 zYJEJ$5w7uE74jrD@R1W>z&JYg^v>_`Tw@MwMt(Zt|H!80 z$;53w)AskU5ALn5I3{+t=E~J%GahpCtaTd0M>g!$2=BIcpIc{n2w&CiZC-?%;EmW> z#-NOt|A=p66}TxJti2!7FV9TeFb;H|+}H~JRR`Pj{ZzY!$2>PdY{?$LDu4Z+&k>XG zOXNO}p2Qb-!RP*%OV?E@2c|w$>l-hacaDKC{C=9>%@e8yv{PWxMU5e4-8vx_bYOUT{2HO z`$Oe5>kj)I?Vaz0U*GfUILz@Xi-X7+tiliY&9Z|{?Sg&zgEK7VR3i&&zJ$XTc;B@@ zb7!lY$QnKo-^9+*hcWp}{%+4J;v3^kgVBg9!=C0oBtR1;G4}QqJ zRe$4J8$O{7GsdQ_M`A4dPOaM5oIV`6xgH*_b{w3WjqXR0Gjo*aB{lpzwDr&0=el>k z+VdUz>SxiXzSn(v)>m-f-D`4lp6w8;^6}At90ymUTRA6fq0g6dHODKriGjse)mIab zlrwdX&%Wn>#@&$*@)8@icNjh**1=}E??)^t^Y~)h5XW+VZ?pCT8x7WnkiD{+{Bv{} zzt#FWaigCerG3xgZvXtGe1zjBd9Hm_XM5yC&*gmjcSVeQ3)kI)EAJ^A;{S7e9ywRr zCm-DM$uf8y!hbGSensz$kGZjD@LX#cC;#aj)cL;8@eIl(Yop?my>Vp*tgp>Cy2DX_`J$~HtG1|$-K+O?^!`~uLIGg?@u8?nBTbH+H zv3+Gl+ny20S)%rC0d-_vRK5l;>A(7EVyoE2IQA=U+<*PR|2P|y^-ya(;D^ftdrQLu z#9*>>F|n zVoq5x{`8mmgmF@M$(Usn-#URG#IC~Un;W%WrgqKulLOyoPNc6fmt`HR&&>5*t9Uj8 zjyX5l#;0P@=dcHZz3kXR2Q0!7#veQ{=MR^N>FtyJ@4bbdr!dZXVBJ?)m{&muarShd?axGBoa>oyC zF$(?n+4^qrgIy=OZ>d#?M}|o(XTWKNQ~i5njOlN8#P9dBVlsR}AmLg;gi^QJZ!C-&=ui zu^0PpAD!3O7uz&0sN7fcV4foyA{KLv)xJ|x&^5T^KV6TawsyI|&w)AidD0K&VFScn z;>ta1;3~CnJlF6I+geq(aP&2KN&I*GQj`0sH8sGZyuQSbx}h(*JKMNOUnZW^m3~0X z%5{sKIu}vy)>E3p2Xp>Fd&_iP)058?!(cqNR`)Ok8|sns`V|NIc=)jLC;77$ zKdc25YJ@}&+OK?L9YfZvtZx@t&Y|0epQuw%^Zd%7*Qvg6lQ|hWjX&|cm^$OWhqAzP z)v;q*Lq1#d-&$kHIA<*6Rr_Q<%yz}{d;08tNMl4}Dq``RUugA^xi2xEw(lM`b>-dY z53KQOTkTmM+dTfMa+3X7!N#rmV4HHI7*toDo9p5;mGJ@guPwXQVjoYz@fEM`t(+il zKp$fhn|$6q=so-l*eD-~8{}Fstq=1Ka`&fc7+t6T+Lkqc-P>l~ zXRyXtWuCU-#P~zGQ-7cPeb9CMJ+?!zDL!0dx1Nu_Nz~2J=>OD&T zp2A+>wlSXB1;^^j`WBUA$su9C(HpVV4*z4{S^D{JekX4hJT8hq{HXiW(QV>0*Z5dl z%bN8B@=u?Ur9RI!T=gxNxW`K_Kh_7rFY@kZWC*r%UPHYrf7=HCptRK?Iv*(K4z|ijWW0H<8!Cv6o@r)ChKQxm)t<`^^xaH z@%}XNA~KGT*yMYhxeG25pCY?CVk~htgdWMYCk|<19`{KkMtOrxUjGR@CkA8RAy{hG z557Z|tew3fj?UpMGC$8dOpM)KjP5P#u z@7S;R4*%4p?eJ8M4ay~Ppy#5ri$<4ak61y<@;yk2E8wCu7|wf2kKQt_sW-NHF=-Jda0*mT?sME z`Kl%+4By6f7I@$KdB`HTb8dIX?_ywpezd>{e-2c4J`GXr|zk?k6z-~Wx zCx{34k*Rm~WXG2|-{c&-&&`_80y30WHW?>lPfT!4yUNQsg0c2)2Yp~$r|8u<*8E3% z#zwu&W4HD@obcyrn~rA*8E@{1uf&$6OFSzs#8)3Yg+0U%T(OVMz7DS8$GZ9ic!PMt zeW6F#=mT@Zeq@78A8lUVY1X^zIX3)I7hH1gIX-zE-_ygVUeoV8@^RYU0I^{cS7pqp zDS*sIcIv<6fpdI0|{&@92ttSd&(MtoXwQk7>{Sp(BkBou@ihIoNrE zbHHslRarRJx5$!qOP75y)M|=P&~917PJMPc`z?RZGA`?|Y9rnStKMv%@!58bsTkJ@ zYlxo5psrJ$^AUf!M{S4sv^>t*Ua-B-cjRX|O5N@8JQJ4evvCQMpDLI`ojG#+Etz-cPIn*AF>vmaoiFs+`}ENO@Ph#SjS|n zN&m_bu>)uFBcI$e+E@L7m_KC==~=hhxEN!Nn10pywBzBNPWH+Vljq&XpC00yU1KzU zKp*8JZDbss*4EJ*@r8KTZtd#^x>f$n^P=A)@V7-fuFKVW7uKJS6QgNA&Zj ztP{-rsmjVc9DUICf(0?6-#P;a`bftl-(K*;7|Yg3#or$KblziaPUU8e#3nD!v#>+r z4*QCq=8g_7A;|1NzOmnK%5v zS(zJ(BXgbd`y}&;$c>oab11A=lrPwdGQNacAI88l@FAqvonknJ4w}J!`K~ znjso~d7XKzRjca8P>&+kEOWagKFo4#_1?6GJ9uGA9k^ zum)lNQ8|}0c>o)QGlM7Pb;P*EkaL`EY{+#h+KsMadpwsKjLvOSvwfQXIbVvNiACG< zSzTfd?25MQ{Fb>>Y{PQ_#3N-LZgLFb(R_(*YI{BpUa-%>PsWGuCpIaQE5to;>JmOY zaWOWfPtfMiSW|22ETu-SybV5b=bHR(y>t0=n;1ubZ+l|c^=5VF9#qZo;TQ6bR>8JBDN?Y$lyFsXi&_sJK=%Q`tZ zOmhr1?g2yM%=Y(*Kg5`P+Trg$cmutb&tPYTXJ;Pxx2gv?iu)oe7mM#n@QF;L-*&BI zk7sK~)LMr(>X{(daJ>(e@wsQX%+f!{*~6xt4;l-8g{QRX1Gwi6xPHrX&A~Zu#O~CQ z@kZn~LBF(7Vk2 zwdR1Xs?Ei(EOr6`Fj+oh`so+Bx-Wjipl`#GI3T2%kNznAd)SC-|wZt3RHBMTYgv{uJMFJ~@P+ zzW9Ndn7om)*r&gzv~~6TN$i&zWa;xDHZ{cOy*Fx)=WEO2?HE3NAXdc3w$3xc+Msm*LkOhHqJV}XP$B%KXEI30GCxhB<}N^p<{dxr@~3vb@Zukk^?<6 z=v}AgB+Y>;*RhexP1?G5K4b6UJIs;xps( zkC@XgcN#2!5#z34nRv_nf68cpHnvz3a_^Jtfa+v`zBcz7%Ad(c>yM`4DDOAM26NXX zcM8$o6LaBd&w2=A@B~{^ht3x`8%d2F>>u2s+p@oeT(Mbrqnx5k_Q@o^sGNX&s$VJG z8JYM}+wF#nkU4zp^UuK;`U(bEH{zZq`ba-F;b3Ep9lmRvE!WEzj`L@D`yKyVBrj&{ zxA&&=yIX)$#guiZv`K5ou@63XrQY*d``>cNC$KH|8Y4R< z`B9x-v!?7g4zWWygtIpCTbX7qY3xMo9)H!$MbuAx8o1O)q(9s6mGl1C6dX}=dNrTT zS*gg>{(+b9n|BsyU+UT(;_#CA;QB95h+itF=mWHM*7UH~^gn#_$t6@1nl<}GWU z?OCj`e{g>zu^>JHIS`MokrQXnpL*b~yX5WIbCS42j60Weezfd*F!>4Z2cuqS8NiOH zHzmJ-W7e*)arixBxaAcrR(?Pa`T^qzZPM7y=PG;S0pmV>%I0_I9V{9v5o58}S-z-p zSO-7y#4dA+Q`VNuiO+s%eI$Ky4#oW0J^IRO8tki&=hzjv4@YP>-aD(!hGX&D>V_I~ z!N(4BbM~o3ZrZq5JsVHsyQi4|h~Q+V&=6@a|DeLa zg<~>)a}>rVt8xTuuY>O@_tSpafS=`L_0Ao-iN)*MZH;l@Xz%t;9DmPVAbf@Q2D*o> zETad{Q-_0?<2dKs#P4foJM`%r>(b`W#QHQCH?|NP`g=I0tnwXsM(h|Dp7A3V#ECXm z>mh?pavaXN9FOvI9L6ksPM=&};x{}Kx6SY8?CE(ypIB>G2k4!@;gAPnyG3F(^&l43 z*#qSFT@UngK3m(i?+3(C%)!d|PF)YYge%3(8orMleD;r0%RAWMY!vlqcs}bl%F{iW z+6w3Xqg&_P)EO>o_%O#Q{vD_N(64xhV{NYoD=; z@|E{oJ9z!fL%vWA+RsZDtTi!aLU)D06RR=uhC7+jv z?Gt#M{X8_aCmvML0k9^`yH(EJ$2FY6#8*rPVNjaC-5E|+1@U`ZI-;jYj{Op zpxmAR%25-uG3^+*abV&|J9-{7fd5Qk{ zURnInzS17^e(RUn-a!W$qE9fM*qr)=k9B>{$LSw!B74`_axX9UM?3b&fqSxzo4vy_ z_Zhj*6P?DEj9c`z%z<2w&wOedpQHV2do!IH$E@=z4{9G^EHQ%pg4Z(M8NW{s$y(Uf z7dT`L`VFzP$Pb@Y9yt?tODrj7ToV+7i`eWc{<7!%zWZyxGKU~GM?cB)aHhfbv2Cz7 zU*jb8xbb^9lew{YA{NTt;p6{(lJmM?FudiQnL2inpZS=?CD>lt$4_y-CiO7w;|61L ztm@ABg1jf^;p;h1j7^d&pYLF&#IEvDaEfh&Q}MO#Uxxe2Yx>CZ<1gIz=QzN6&IBk& zb*7!Q=lkRl?Y7%jWq!`tKDlX-b)Hc^=iIBy>jGT1g8#FxYuGWE$8~MAtbzAE@`2t- z+sCoJ$;WaLAGU!{_J8yC;0jJcw)>u&VdoT#Ez6r zd=h>0WXB#crKh!zP%-u#Ad*0xPJ#*rmfUs#wOFRc0Z?b^qv)CHaV)wy5(s6 z7&>=tKi3=KBerei3KFMLp zVHqd!a(m~+7GpOavxXQr4t~792YVK8ncq&~D`uG2CDum%JNzxSnz?0JCWbb@(Zt8U z5JzT?OrPb;qSX<`VmXkV4l6+9?EpTgzt)6iETljJ5me|4gNWj$^fdz4p}JC)CZ zapbK1+`#L~K)%)YvbQIktL%=^Wt;0!*5U*ix&9wK*k9*M?%_4=orYiQJv78faK7Uh z1JkY*A3Uw`DErcq+mvrt$@Q&+8Sk`Lt`9s{8^ig`1OcAJOlW9Y$birA9zON znzf|?-V+PXjn463>Y3Vaxd)wfA!}SlCfHhgKCNuPqg&v>{dMYl5UeczcjLFQN$#1@ z&LZb4o()cd&v3+_qsRF3F>tF);N5DA=+XRw+$v`}j`zfo3x8^`jcuI}_in&*j_o}^ za+J9NY?t=HCUF724n9IJ_%E#(LJVE|N9hw`s{jTz> zoU{I2_1oWw&DuHAN(a8=d-g+){D3^2gX7aU$MeXQu`%1?TvclKQ70?&cW_v~Ft$x} z<2_=uiySIvzIP8e^LGu{T`JAAG*mSo*S4&la@4dl?%Vo_pkjaKR23PYxR$%4OOKwe`v!{`1*lotI8CetC>O zQ-8hIDxjWF&S#2;{qWjvxU0X$?MLLIn7ga@_!xEXTyg-;7X!>&$`U$RL;m6T`RaR! z-?DeH;ixjl^BY`6AIu4@H)q`ExA>9)*p)=sxwcu0-jUdI+P$F%Q9jNiU1Gw*dEo*^cxJmKfeFCnwX zb$DWEVnw(HJUS-No;CM##8%Bos$-w$UMA|vCEx4*5jdiJ8VKedxpNbak$Y;KLtMkT zFYG>bgu!dZf66@Kl6hdOpHIAxz3BtuGsKGXoB{0L?@r?z*^`ktK;2)A)clY9vollm zEq2g_cguMvQ}As*Mw@qyzvT_NlJmqh4g!n44&z78a*}v>2Cot8XYOg;IZMZeI zMNPnR&S%7O6aR!Cnlr>@9lLWZ-VI3JsPyE0{QVVk1i7Wo2N+w!!6%Ga-#orq{mUAd z+FnFw-5U2O_eHo^46iV+upjdD8NQQs`tptbaOX(;qU~~~tsLUNjUVN0<#Gzom?LR) z7|h8No{I+`zsN!6e2uxq9<>6jS8bir=v7X#%?mI&$edI^;~rPzIJqU<#T-o>8^2xf z{|9nr^00pH^(N0Wj=+z>N2#y7Ob%e2n9;q+w(s6rbW_L1+KTHr#uxO*emi$9ZzkU?I9bWsgmhug_RMpnHAIabtUz$oIVEcR3$fr$0A!{AIXTb3w}9JSTFH zv&saq=?XOs882)7ypNsoe)OU&$mcxHL09lM>UEF&kMS_|CUTC!n9)2l`?SjvcF7zt zXDpegB;J}OwhiwwZaIc$&^Pvd5xZ(zFIXRb4_A!yJ8Q<_IPMFKF3eqO1IU0pHaGzf ztl0;r+>4pm$T$ppjxX`Kui)mf7d4L2Z@C6E%V*?7_qS??TMKp0*ydfvc+Z-i?1Ku1 ztl4@%+wlYF<7%4cf{{gyR~YGvkL_meL* z7Nw2$Zaw#uWZo^-^eN+DOq{xJMw=%-AZDy~iOdu0dQYN#OLA`bk?)hv2}4J9z2`tbHhR8X&i@p8jJ<}9_t;^BNL2!!MVBUK~6CaHO`&|E4%O#b4ku(x}O=p$Q+y4(p*jY z1{a0Lj?TV>sBMH%%Q-qevp1XDaMbs+pZ({ z4CGl3zmpr`N_h1vpEo`rKbY@pTXOj#*p(l^a&#ij-D{+OUj<`}ye{Jd)w%1@@4+JW zUVZQnRX)?$wOn^ZU&v>s?uF~Zayy(_=D~@&_S~#E++|L3#JUhUGwa2n1F**)8+lxw zZRaE0$06T~n`V8l_TA?`r@hz=GPG^ENgudRyg3C2SW88Wi3j~GImB`f*7#o5gXDf< zL^(D7d73`TMF((`vEw^*Xa4Vs?@aUASLo~=pU1Y#>fb9*Ydf`8NA>wWd%7=vCS0>g z9AsYOd<32257eR07w77c=Y|L6HTJN|ImTvX050Bx(@(!56R>cD{{VlfV=gxBCw277 zIR7`U5R2a7haAc#v4eAs6L=^#jnAZ>eHlcDnG4{rxChR=m*ZEfKAG3@eeuv^EnI)B z?Bp-wK<$Qe@nr`)gO9>j%GKQ!}!)VtWh z_ncspm*Bn8Q|wsWI2X}xwfoJz%h$cz&MTEQd*rC$RL|IM5_=dI-(joD*_<(R^n8w5 z-;eucdVJ2f#XIxFw)dfBPJzBR_@CpJU+$0-H6`Vq;KBQI#gZ|%b4qM1_7}VoXAJYV z@>}XuEZPP&upjd=a8lv}?`fca=~uglM7`~_{uB8-H{?Fn*o=3i{5D6n)v0lr_AiE% zy>+z)@MFY=HI9TgkKj{dF?q}9xnD#cy2Q@d7n;1+3O>o0;*j;FL3FT845*#2cF;HR z4CfN5_eH+$C3qtaZSt>Wt5Z2vd}ssaYK@=7jd>Aer7sZI+%Z_jXa~EeKk>V<{49btIw1t!9#dWpUgQ!&OBB- zIm8d1lb;-AEUUbyZ%}5R7!!G{vQ1pFx5{(jba~UgDEsiYv7$AaeXjo6wQDhN?#=y- z${PGQ7ULc<)bdTaWIiW{uy3I>`#owMW@OC$bFouvKcwD1m~*Vug^%BWUut{k6Fh0d zv3Fy9Y^~g2TgDSjEseDAyu*0rS?zBbA&zSH&52ph`NlTRsq@h8KN{gXVx75jZ4dkR zIq-itc)jAseQfY~P2|BsCY zYh?kvFY+vHKwZg8AHkRL1HMQM7;lq5m!~Qx8K1N=*SG5X&27ElbJlWI#uMZcf96%Z zs4H#$GWk_x!n|>Y7*4LhU%O0_$=g!*wxpQ5fOC0YSd7CT0 zWsdV`|FjK%G8V@an`gcHcZpqXa|d}jH~Im-)6c7y74~^2_XqBN;P1f>GKE)>pFF2M z=8sy_UjvSxHc9rCwmI+ev{u0w&dAOY@_A+ zX`Z8Ad-z@VD2Zv~1#MUU*2kKEc|MO^v18XGj03=kYb&{vS`OL%zS@F38(SvMmZMnT zSFSww$)mk$N7~sQc+@w$r`LGr9L|)lUh+G83XQ?qd_@^y{MO7i#+u^$a6tM>Z17tf z&G{_v8<0=aFL+4VP-~q18s@AkzV&_QFP_AwZQ#2u^c(PiIKam8-D~E3xA3}WL|Oli zA8hxBSbNA^r*iOo$u8ef=i0#IK6bv#K3>;?f)DCYCY~Dy*Yf6epFPff^{D!@ISE=aN}5A@6@i9nRulBeDvPd z4%B9xd+O`3p>hD1z5i0%o`e&<-)fop@-_dz;s0=5IBn869lm59m~%{(Yim5b1`bY% zjloI!xyhW5JwB1~@J6%O0**9xa&O2m&;3GtYd_>y=Fy&Ojhx#3A>;Tr??_3EjNOTU zu_^by+^loa&()ViZoB01+dUzl`K!YMVQz`0Dq>6FvMcHiF!d(^`$m;GnX=e1KY-xf76QaUaF+$_;-T(;Hjt z;;-b49e7cGIC+ZR8T&0i)O#?_ZZVPjbk;i!SCNA`_^GzHg`St4?#(y!PL^YiN&#>(9G12U247O|CW_`~~WPlzv- z!3W;|0(U4c`|FtezGp!HF;KC_d@?#v2I@v$Lzl^wxdze39RJ{Z=6UtQ=-awa;njQa zHD;^;ckW>W`X0s^|J`GcqI|ONn$-&PVR*&o$%p1i+r7ugG;!M~|I>!`i`E`Kz`s7j z7VMWfMRR~Y+j!jm`W)-^Qb)&obF$L7-Y7vfl1$N#V{=JMPRr%b%7_K>@1#`vAREk2LBLX3m4 zQ@b(v@lI-eK6BUN{x|%TdtuONjbYooxpGSl9DLb(ewRb%>5uJffgjeFB9BFQ(LU9^ zcwhn^wnnDs*o>FNe(qfY({kGo&rtUIQ|B6I{O!myD?eIOst1nLvn zQ&qa;0hj2vep?+;kF^|=-*!Ii80z}fBbJm`)>rN88vRmNV%YmM50Dd_SFVxs!yjw@ z);c!E`rGu!J|Ln*OnfTF)KQDmW{-S(H@cV%ht9Cxr;ifH*j)N)EqwY@ z@lUKpzAJeS{BF2i-qL@Q=W;K6Y9z^n&A!+&20zw&%quUu=hj$*wY2y$bQ`-6ck;?B zZ~``Bo6C&(k~rBohFTE1ANXiT1&jH!k_HvOy9*AILsVu z5FBymjpqq-ep>y=hwlAl{$x$eM(4&{;1*oNn>k|x*6~v{HkBil`xXDY=`=P6UbHLf zDyPmZIYDhJc4552xgYoUg};~!L|1%2a{)1K9boa#xvJDEH0NU9#Y8iQme+$f^Lug& z_gt`775U=}-XTvptOp+&yTY@nNzVE3v?1>}2YSadwM+Ax_w1!__Kn2$xic(SVqO$m z24khi_uKKR*BNBTIo-@DtZl&DHnL|8F1Q9$nae9z&fv>S@fr5b+@ZMIfZOb!cfg4W z$NHMTxi_;MfNyWj5YeL~H5#ny?NI4jFK_OElV+7^3FsxN?J zsBaK#P4!j26?5Wiq2W32c@+x-@LR8gZ>2BFV4v8GbKH(IV~oDA5%Zj^$HdQqx%hPR z5M6vw<}~ow0sBVWhcrFP82Ao)d+fJ1<^Gn&@5YzC$ELuXa-yw@t=$gocYozL?`qAw zkA7W|E9qk6+-VoNi;E+;z_E!xF{BS{II?(Wx;*c>4dp0i=|lDt!!bFt=Kd4zMu^Q@ z@)a?QD zN%>4)AfI_gioKlX$i2TOde*14K6f2oZjQ#dU<^J56X6IQLk?jspU<#=s;E=; z@WXp`zI;M|d{6&;3Wm<`$rrpQf25WeepS5PrLUDg{yE1v!7kV!Kc(H!|8hVMQ_TO9 z-_6&+FPRg_8NZ3$a{rco@Ps(l+Dqztgdg)Bp6T)q!cp2B<2}YBKEoN-;kTZ=djJNA z)kkT^eIVzqDIxPlzr{Hlc#JHlSznIvSDsJ41%r3wik4XK1Rv@?cKVs;SbN30>6}Nm zbNOxhfUSl*nBQd#L+IRnmOc2(xY%(!Uu16D=GCeWkmD8nCD*OMxpIR092}D|6MXFc zgK+<6Y!X?ABaVpctyz!0b6#Z;`7H5y&x9T_{%iU^jg8pnRq$=ie>p{6>ua3jGj~kx zDseYs0>_cTB^+ry{G7j?BZ*n}mw0AKdow=bE?(rH&%`#oXH6N1p#eVE@}~Fh8W$;Z z@|}#Ccxa@-5w_=^yYPg$3t|X-=3^`*UbH*UC^UJ!;N%nUD;w<%o<`m^)@k<5rY16c zQItooQ)4Odp%0hCYCaITz~^$pw(}$G)%zkIeH6Iw;`hNM^YJSGb`9m0`8)cFZ5&N! zojEeOBF0CL!PGL?{M`8cE;?L92KL7}x)>kdsAD*M-^|$t+V6n_{E=rkx0z!t!wX`< zcvjt$CyD;87qE-{9pl@KeUy81uBPfcdV@#7+aQ>j1BY@`<9o_DcKP{#tBnnrW~g)6tBnlDEGYD_A)V)^Szh+K1+_1J)Gh6Pw0o-jyRLM$_?{qZES_U z%E{`LS{LO24!!_W#wwn15j)}@Yx3fqrY~2-?0<>dC%zMSsLe4K6{us%?Wz=LVxWe_82?#E**SgawTGu+)nbK%IGWp z%RH3Nw~o>o``yT|k*lbA2xA-kwDXztL)*RubMm$E(R*xA`F$mxQ?}ZwK2$wv!^Rfo zqo^I5eHyOo8y}v{&=2-+z5=I9^wW8r`#=uA@ss2( zv(_?;4cnJB#;Kh+hCSlRef$^eHu}@(Us+7RS!=wmQ&WSOM}Jvk9ek5`euk__C znKHj*-w85+Yt@T5=4_t*2)4k3_E2VD*4*gn+lnQ8g!ey%Z}h$Lko(PM`RtDi_3RmS zs}kE-KOVlw`K4|ApL(KYrG_ZtC#7+0$SRR-en> zN%V-X#1Az!;0r#ld?WXc{G&%};nR2Sk%d37#XIsFNASlee&!?dGoNG5OAtV#m8F)y*v2zx(P* z`~vM)Uc&Bazg!TDUXlB_2CujD(KA5Shk~C9cPD1wyk~B?kEwhk9%=8QMOI}9-Us)= zq?j>gU+kc3bS9VFF?YciQAYw_!~fA+e5rMbxOa;4}X{Arr$D=lGWX?SS`mgeB{MWd464`jiKr_FonD49D^Zw4sMn0J@ z(3Tu0_b3@xub-;tKgzhVhAvA9X)-3W2feL@!nYRNc?N< zP};BgPwUS4Tx+eI;Rjan!*BT8y&meBJKU`CD^3j z;)j~Uk(X6*9*?1U?gz08xicS(*sO`KKj?KyvwYZMph1GS%u``Ft3dyZ)kyHRh{;0-@5@L6ON z+g9G%wisIl|BgplIA@b{CgCCcSne1WJL-n`DZatl5!#vZIlyKncrNyk*h@LH9*|f< z8(3w2cKUlTMO>?Hjlrzo%|fUcxJaOkJfnFXC8IHIkLRM zXWr7Ed+_c2uBoRNJDUeXbT~;0n3>%mrj8ZkL}{ENh3xd16|7hxm!-xKD6D|7L@_oq)_2TOcE{pWY}1n$cX z^Lk`aeLl}*T;Yf_*5cWdnz;Xv&z-P7KSo@41vj<)`j!4#=X#9qxKHXsr}~B(FI8E5 z;JbU+4()NSjlE*ntM`0cJM#jryEO-fkMut0VSK_zFk;`i^ZW7saPMf=2Q+tFg%4k$ zyJ6mQAHyk}EeFX9O`c0V~$?TDjx zABX+!5$|b>gV?fqezjWlu>%KkpDOn{(I<3-Zw{tBLnmj^Pjl;Kf|!W-w#pcP;a$e} z#8^KQtHNRKHH?hizolP^{Q2EEn|h~Sec8lkDAPk^m$(*RWjxsWH|7fHtNJc*5WR^( zZAJg!mvslQw|g(i7T*Q>&k3&svWAUGx%v6?zo1#^_hcT@l)6Y&x}nQ zCk-Hb_v;9azGqg?KfY(6d5)N_z8x;aF0RQR*st&)`%bi{Rr({3rXCHPenML}tS=4lUKhD@ zFG%Jk6a4-K?zFw5pRh6T)rTDTT*iDr3}$;^r`A>mmoqc*zqy-S9q;}0Bz$kI(+Af3 zo6ioes}pn;8Pu_fb=Msxz^1h+JnITJz27)o%6*;2EajGY-8be{pJ_`ucX_X_GdJUe zBkoy`8^Heu>#K~5Sg*O?4cT*6gqUQ4{t%M{OWrGr4#H2`h+_ByWo2c3}C;h6?4I7oF{8f^t<|Vo^=kE9^i0lqn4Rx z)z59PmM>1c2g2GYi}-cc^U4wPacm`=h@Z;c0_dTfzyaJ-7;IXr&%GM*g>@3NZ_f{M zFL?Y^#>VgRm3+BR-cg^0&SEzs*a+Mfy9w`ON3KPhH}O6={D1i63)mBrjN6zeYjce4 z@gA>5+Gy>7bAsUx*A!SA5$m~U>>2)2yN+#CdrF+}jQ5D;9?yKbr$Q`R2Z0(1*h!6H zW8nvkiMbTa;vr|pQ?ZP$T8@D#NYy-x8LG-pEy-6 zH;fP^t>F~KO^MCgW*e~tbxJiB3SM-##?zZPTm3*i^y??XLk&pp#kUp0C z?8Q*H!uWG*u;N(GH%4`A;_!~oy3b6%L|@DHTH=7*MRkimx+5lhO&l@FnAQ0TpIIHK zz9k&a_n2>_u6=xAhq2=ej1jm$H#XO<%^IJJv*^Fs6Q+IXYlgsv^`o)dU{7vTp7XS6 z+%UxRtj8svjH74kbZtKeb-{u}3i%1wD{L+nu~ zm!H809HuV{2I$MtNR98kFL#|j$hkYnsSoZ`Cyv#7-S3(2TN7)Nu{zi9<9*k+_3^G_ zt21&Gi9^w2S*U)btPuBFvrRj-jgQzuBfrcqtQB;DAGl?$F?}L#LH6N=z38&WL2Eom zzkCg6`26-B4so%9tyI5K=N_|sPi~SQkaL+_qHoN#qEq^xxevZ~lkw^=-HU6VJ~P+E z4#I^^zPtKie2BF(s2!8@wpYwae6Dxqc{jX%ODvj8mPOX6R~mx-?!F-_@%FmyS4vnvnOC*-%sw(yD5wf%_)hUV4yvd#s16a z9{Y`bIu~i~;5BDa<^Aj2;TLo5+nd#X&WO*PE9fi4r1wHN$58eww7J_juHp01TTGc_440uDjUoA+NWr#d!A_ zJdt(VMdpaE`>3~h`UiKkYyaXswN|xd^{DOIk6S*&-BH?3bnBS1hnGAw_ef`~bBqTa zC$89Mo%ap4y-rMN-!GA^_U@fH*ml|FRZegYrkpq{=bA}5L*L#tHpg>}Z#a+dUfc4C z*99=|*iZgiapQBn3*!L4amDZV19e^I6W`U&tjo6GO8Hh{Ejta$_mfX-qv_Ej-U>gwSltljJtW&bG3QqE86_V zAnmcoVTkv&Z*{)Iyk{SKJLKmI`)_&CT3!0$V|dJV<;8dCMP5%^#5=5YmkauDyz`FF zy4Hj4<0r-Q31@8fX_Nb3%TIh)`8r<5MJ!d0!GzepB=^C%%NO#7Z4Upi^SknYdEQTa zR&I0d{eSt4``olaa=XS3iN_vj$2)cFoh-j;pPZHRT*n*E1iy30&006NV97H;gHzRy zlGA|89{DO5)6VosgSHD!yo-l;qPc_DIYi}#XYiKx!Wwzzve-mwaa@f)kw58w&6oe& zsWy2@F4K9K`8CJwJ`!`P)`Mv3VO72M&<}myhktKgRzGk+p6Lv`dWL_JuU2=X+sbq3 z+&*hN-ao9al(lw#f*t6OscjOOUtn{_S8~c8T%gTz|5EI5SDihjKjci0umyF*-S6Nj z$Nc06UMKMH z8;nz4G#=DPEx}912Af+ItJi^?_z%UZ0gA`#=?vI%~^8q0toL?2dG>S zA6)&tavE~3{`70L!F@1n&h8tWC`Q{gKjfKvYnVrr5%BUE`FQSF+XS;^8h`Kn+IyS8 zsydHeVzaa*=8f@>UOg#qurs+%zTE`_;Yc{aSpFXWE?;khEn{tBj>o$__OY`Qxb%|m zO!FByHuG_0Q?~fL-#^BWo)aT;$5C?F*1xika)aZ({_om1Wl7(}t9QZ%-$(HNBsMeu zBX$qg5o^ZWGgFBPvo@02;CH38wo$NB}y8?&d-edKF!l(n|NNO8};@}bUb zVj($LU+TJ~ZOBF94*ShK4d0QyU&boR@Z$GR5_dW$`!BHe4qu>+O#Y!hua)_K@!kw= zX`|XLHV~d=4^HJ%UiBHAd8_(`JF&s?nwUi_Xam}a=O%VLU;$tL6ui%%??rsyDz8V( z369Z)HD@k)z5Rc6Z@@cjQ_i~Ldk@G(|5MK<)G=6#UfY(}d+?qZcD^E)xE5?IB!7r; zbCTMgt=6WYWapW|P?ky{Xl zkGzZS#r7)l|BAE9WuJ)y9m{JzZ+(wlWHVkrTV~(|`C^N{9Fbps4qq#K?k5r})^!i38vA<} zvv#!7sj-1JlQEMUIKe*diP6D2dq69`-XT}@3}zFbIA&vT^VqIQqZ@s3FvogiFe&f0 ze%QENetNY4#_8uPKC3QxFF3chi}*Rj@7^)L1y9+7tFE_rj(bs4QwomuJ7Rba-D|u1 z_)zqev3-=UdH)OVZxe^dHo%v1vCe$;qv#VGn?N5Qd4COF)Yi=_4yjJ12LODN*Fd+9hd9=?Y;oD8&xxOisXX^D zZ`|>|^^}yKeE$dHVQmE>z8M9HZ^f|6lNxzx;vk%z$aIk#SX9VqYtKy7bSwKctaO z{7B+4e1SPUa%kK)OW&~dd+h81`|=K9b)nDeZK9*)y4Kj`y_H^LcW^N}PrvMob|og{ zYvU?x$nzQH6_~*eG6wlh*=rlhbr&0o4hEih?#FwDt@DVEp44>{cptx4j>zG1uTAcn z6z}R)+xko#tvzhvpR`T)>o`vPK93*s9E)Dly z$k;+(Yb=fARMUzf-R=n70ng59AMAE1hIq zu@~lAJMfoxr-;QL_>TBzuYFlTR*t8Koyg<1{|vho3;H3~(sy}|?Hwa)Vu13Qn3y)> zXS82!Y6ZPG=3DyY^Nbg-$U%$k=je0tExM&G`?`ug6QA%5?5i9uAO|r)Y* ztgwZ=z02t>uiO`&JGHz+#JzFUOIEj$4SFc@?^}N43;l?;5E;|9cYEmPxX)CcNG#xa zA@*06H^^d&_o|F(kNwPD;(BZ`wxv8aw0XuY-iU82M);n6rd{jGWz9`_vlp)HF}K-= zmyXb#@oeh@cktKB>5w1iME&oPKlvBi*G`Q?TKkUt;Q`~_exD1UIPX&TSCD>_Z3t z3O3~KN%+aQW)2L>`_}!H$8-PrYV|YvBy?Yvi1CbL9gn(thHb}Az}`0NYpw;}{a7(O zj$by{gx`#xh0o(l<*yx{MeW02^({D>((dssJH+wEtgb_!vhU~(Hm~mWtH{!OTVuD& z{2l$FEB%gVV(R#79B5oGZsdqAx>!OMn~XDh2JdpgA@d3`F~n!Fy)s4oG|Macu)axR z8_sJ~eb680!=9@i;xpb^FMm{>*Yz2(N^Us19H{+`ymzV9+$HCuY{ALndb{_24&Z;) zfpenDMYKW8VoejCQF>do{rHt1m^Y9c5i@hdMP1q(C%%|Me$O;7jFY{!Yxa`&eCLzy3q@7mnHUy4v0ZW3-(CUWfUP z|6^Uxv6Oqx3yG6G?1Hmb;e$0eUQAptSJ4iR;QG_?+Lm#oeo2|o2k%}_e)A)LE0x1CAoMo05#4kDD$aN2UvUZz$=&bppuC?0}c++~v=#b|;&eh8oIDzq$1?E~?j%w!xUS2@hON2L5K9}pw@JLQ zkNxVKosY^1!~E`EQ}^h}G45sY3>~paIOzr(x+jk4Voy8xO?9WA(EgM$ax2u$$~*)f z!3Wg5{UQ2v4%4AM{6~D9oU2Z})0aJz@fX$(h8xNi{qFE;&UOn~_#IVlHg8@sp1Ep1;k74bO3&1U<_k;!Zhv4pxpc4&t8da*Q0k zg9f=L2jhB?*pm16wHfv#V9$&TUr65h@E_HO8t1UDxyl~-a7RKpo%xj;H^DY*L&;lU zYvFYFn`^(ja65aa!Vmft=J)O|H{Pjp7;tBe12FPiorHVe@qP6hZozKMA?jaQcSyd( zJ>K`M)$g&UaLE6iBgkXNzpplC?BJPiV+wSi80!MxC>IUGBdzaWKu7k$u^;mt_f~(z z-jQ$WJ~@9EtKL&Bo`Z3G6k{mI9b^i&uaVa~{Ji{VF2i#Z*eUzGn6sf5#*#6MLv=I@ zM%dHU*duWV^AFa3s=q*9^0MQR&nMtt+ReJU7&qSZ86UwE>nqB~dDbuH4%w%}eFMat zZ>#O8`yTeIT=w9`WAx^@^wail7yqt5q<&+3i&##57%(ZXsV6W}PVg<-pYt7fu8Av} zoUZaCRyiaGWekKI%LZfPPOhAVCe|t6$VtL2>GupdS4$uC z4fnJDpB#pL@DA-GhGD)lv!kKT|Q-Q?ULONHp4ut9~`~mGaunr z@n_9KWLkX)v3$i?&7sH_@|bY|wWfkCV@~9gSap~=zzX^iXZj=c}2ezcbZ z^l6!Bzbyr{>n_8(nj{UxwrE_;2GAGlkaxUbH|UI{2#o659N})mFJuE(Wl=%;0RJ*payFjTndBLhU`m^*F=`!;Say8p{QS0G$Rjw_ z4jX@#zMaGCH=pZVsY_gc0JoSIe3&7g!%rx43Vp`@-q-oR?J}QA+&oWvVrTPjm77n% z>Ye8diF3eixayubUHfw0*2H{?8(j-G5A=fXdsnQn`XTb-98AuFzUFW4a4H|+PHVkp z{(?=&6Q1`vpbvLokbFq;bemvNzh^w^zMC_2#$7w%1^t~dyM5)XM0vnAjYqWq?&ruX zeH&xwrXExx(a`s31gS_24aY9})Jc!=oxBgVy zgiq!3aC_s^b6>&=eZBxY*UXK%>oCtrs6_VHi%6YvzmQ)^hMU`YJgI zK1eRteMF;RT)PqH*2%x)cX`n}k;Pn(HBoEWV(XEeyybj>IKX<#!G`=IpU_w5fx*Hi zvH~OJg8a!H&#=aY_9CA&`=(+?%jnHBOFjIXm~`CEc}B6LrXF?ti}B45@XIKlw>ANN zlXJ@){tN7Zi<*m^;`dh8%0i6l8<%)h7s~&{^9sE7eyp-!y|LV({}0$km-!3ls$-X< z=#o8_*8ij?HS!^T{=oOVm(cx2%4d&xgwI#@@|B$Eo~ar7W-U*-RQ|WGoVAQDm7jJX z7R9A&@tzCXWNhxO^?B;uc**^u=lIoYVuD-j;Q?Or%+4G7XIt15!0ORUaZV+E$3#{gj7w5Oii}5y`P<``@#PX?w zm^$I|vbJwd_!zrCA4k7%>I6S0#DSh`u)gLtINRZ~^13|bnHlN>tB>G@{ZHixtQ>Ri ztK&CLI{d!+C+*~C@B=<__Mf}(ct++CnM*z2sQs6p98Y8dXMv@B$2s=~>+D~N2ka|% zyp%(HfoJ%|0rxYOabi8>lr!?$;hFhK=4~(eoioH`jpu12_i`@&$?tj3l3WsAg}=z{ z#plZX&h4!mH_qq0w`7<29U14YTISrIkx8s}-K-yZ-(RaoET!K70wB={qjL z);+J^@I~HHGKrt<;`_NLB>Ib8!@tfa^;6y*ZC`h2Lw+!B6SH^tA8_uuV&$G#QJ*K? z#EtT>?v(M1ckyT=?o)H_oI1a7i1YJ_U{)Cti=Zd@X^AyK=O5Zv%h@0J+wsts*bevF zwXqNNX^|Pe>6Z0*?XJOXIM=!GMTb5R1H0ciHr|707?)U@!!Ja~*nMQVApet(=6T!9 z#pRo?@HY5%Pg3M6uH{>8>J{&Qz|YdRdN(5TyCraB?KAash_94G9qUu^m;BxJSYe2dK`kc^FJD^RUgBBu-Pk%JjykFngWYU=%w{# z%2!^P0dL$Hkv)~#?*VPZSgZFL@@LLY!Edn{bCXjw7A!m1tul3=$X4a8*fh5DxGv248#y;@ z99gPwa)k=UuZ$bHVZU|18UL3rtj&X6=ZuK@ zm6tsShn(@BZ~*f_F(uC$&p3boz__%1v1I+)H?-*--!rV07b|ZJ(4O{XJYZX{jlgHd zJ?5bj-zulK*ajFY2jG$WtP)p=k0bo=Df;pr&&w~rEB}NShw1lQo*}-((hl+UKY1PO z)%>V?F0s9EC*w*ypl?FgG7eI>Zgu;*&#& zUF4MDZUrnjzD@99-_7f!4h(a_13ug819_KkaP=GTF^*3_F1goM4n6oWoM=6K{BzaG zRKr*L{99r(&I8I7>N@{(#TxUs;<;tnEFu=JL@&J@-Q_4F5V0d#sIU zoYhV2g5Kbf=8i7+u%&;8$kSZ7Se%1n?#Q8tC;Alpz$3pXE1nyjIM*43>*NRXdCFr5 zdzs+7?i(^b0i$IYxq5dKdyOLRF7J77oH}OhrnuJzIhQ%`tM4>_!&#ujVT=9M-s`#) z_U!&PV=Hth_a@FI=2}ND#x>rfa0X8W3$(cmZb$f>eLm#>-mmEXIM+ye*n#b-H}QYL z|1Vj~bIj`9apCL2+14UBB!@45i6v?u#8=IM1D>C{L&jdp0bPd&J!k9wtbTMfj%@Ks zWs^RcUu(}lilr0QF!qUgeJt3Masek-z%{twoEhwJ~D??#ik2h1T9Di7k}5xpB|?EWjDm za4viBtL-~Z&j`65CvVO2eK`a9{Nla=zU!U8;XC~oHU5GL`OCG@_k4bq&o1yebN9xR ziS@9zPvBl%I8SqZc9`Ei4>ZiUKJoiBzKi<|Tb~sE(y#VmhuXw@K4VO-PYyodEA6er z|NH10oLp9ry|HP>=QVT7E%dy@{K@tviIo#uJr6IimoeOs@49yY?nwLk*dw_8n3(*w zzs5Tsu|xg1F$Nr+IFdY0o9mAsbRM5Nk$kr0Dsj@p4^_V3Rp0;SGcrm)8arhi@__i( zH;m)!l=nV<{g9luwy6A0soA;093XxJZ1{O_>e)YI*0kaIPxf?sj;TH4y;bLxl32l)N-1mD9BwwOa45(D?4ugXjHY{49DiBrexUG>p3-|^g} zHndk`g3^aS*~BNw3+@T*z&cIVa>R@IQOC2wxQyfA zQqCX#W_<>pn8BBFe!pV-Z%@>BnPg1nklGp>*r;>uvICzRqht+at*-ev#&znjOcUE1 zza55Wo+PI742*H8_%=R1A_f`abrx>2J{bEna&LjL0d^EFm!G`H3EhQD+)wCTnaDSF z1l7w~<6~F{qTlqBF@w<>_(<+`kC()T5C3lN7G#d&9V`Byc~^3> zo8&p%3%`I}y@Rtxc@{W&tlc<=KcA~^>^2@cj3!x_FDDvzHyQ`QRau(lm5lLrFfRtT0a__$F5yFAdgma z^6)A9n92-Xpl;UiQ|@6uVm#)9mFcqa0{y(@d2(udzj?4o{N#O~Vq0B1mw(Q8y7WU| zLBCSd!o4W=-}{z6iW_jJe$*xBTQi>-!l#UqYmlqd>ld)t<#%{SUBvJFz;l$bens8h z@Zn+Z>)VO7zQCs& zyw85ba!f3N&eIp|(ET;uL%c;S5Po@K|Ep}g$L9;5Swv>uBl8?yn?x4s2d>JP!7%5B z>l&12+2uFZkm~+W^8Uyt80z(EANFX=Gr-r4zd^oLKE%M6%&j?xTSgg&xTjB^O$oP7 zcF-$4O@HK%$Pk${HjzG;2k`U*94n7{=Yzh>eb3yrrJUXKAOG_M-$TCEFi79ni<45*?CCR}@xvXL?mKSkLO1IOJX0LCcG8~rK|aaB zfn)A#5cABp!H_kY=_6RJ@ltb#WBRdyZo!6k7)1}<8&>9!eRu?YX>Y~_^rgnw19eWW z{;0=>e8`R9tF@y;?9FzvH-y;M#TX^Ko$!S8DyU4N&iNELjUAv-;X|*x!(5!8?c76yQ_{ms=B(n`rq?F zvEj@?D_(-J$o>sFo+VDw)|G8nuEdh;6>e(o(~ff?d4Tyj_EhUd{>40U(77aI*}q)- z1HaVqVRz~=IwX!aU;3E;)idXG$}+MtPa*G4!Nd05JrLMZIE4MIX>XWZ4f=|`sR#2t z?DLO|CgFDE7dwz>&vfdPX&0+-{`M_w z7TM;!55ALHujK%~IVO$~BgW-&u)NIP8}@ityEx(e)O3%whQIw#c}1SImZlt`U0COq zyW7I$;U(s1Z}Cau-5lH^@re8cP7`mu<#l}^JXJcpr+ju>@FFp~XM(LcX+O^JXBVt< z=@-U`WsrC9=6)phyrrfFoLe@qXZE_39k6D9pGEWnHY%!mR4I*>(YdsV7B8PULukJh_ zfILbEJz#gt|F|a|pY?>#iF zIQH&(iT=j8#CVmu<*o&VOSJ**10NPUIOn%@Q2Tk#B>XwT|MWw?OW%#1tc}Z^c;zSj z%6L0A>$zX=b1f^_{CW#K!aMHk+~@CO`f-ju!@sHf6S)%4E1w<4CkGe{Ysd1+6a1iU z8UrXh`&awLd=9^;?44VPDevJ_R_42v<0QCI1}nt*^I#dj9-WC8x!&S=f9eRmvAY*ZA z%%)B9-PHLvu2H_9;Rx!pHE|lU#pk=u$sNIEk00)fH4l=UrTNV_j79lQ!C#CeSk(5H zoMTPZn0yEPa4$(>Gjy69zI7z21F3x_wp?sQPWFu&tF(uVl{I@r$_l#Irx-UnR@Z06 zy|R#Z2WiVXY3iYiE7xX}f#)}gQ8@#J9EtDTBiI3tQ?|nz!V~%^FB#7%*A;4+Jf5!D zLvB8k`Vfo-o?WHC_HVCM?MfNyV~k<6L3v{{HeBW7{i?_!9An(!oZfkc@y8lIZSE86 zQRqXt$pxHoVNC4t!6*E}XU3mj%K4?YlTD5h`^-I0R~QSrI3o_YVEtUZah|p;^%MMKKd~|PsgXOtMs2ryE?}DHTk}+W$gApg?QJ)ATlrGo zB-dO9t8a-H#MU|-zDa+!vBM>BcA3vame`GU@q~Cs-~NhNTwfrj-7g>C!`S2=?*Ej} zN)ItA7>RF9EkNXHjKkTpvPzE6zEexwvl-^i$|h~I?iszyb^50J{O;lBHJ=?qzVG=x ziViz)GI|eA)B*P!WSr_b{l(`vJ~7EN+)JEwSYmd0nKl}mngbKq5kQ z?mp=?a}{7o{}7)B#^ej_PA=jMkoSb=oQ`sQhrNrJ=!ba9_`q{Pt`BOv#{G?4;Suyq z45psDduF>fJjFbTdqI?MFiGwr_ik%D_M@peT-xA=c-(w=!5#5DQd z#0qWt^Edi&tn7D<-qyg3`4x4zO`CH134ecWRsQqLj&`Xp&|ZDMbyfP1E&C8khdhb4 z=(#5C8o!hpamYJ0a}SY;bEsbA(Z_4%o5is0t=fNn4w^UvUsjx#;9uBFBeu2As!ww~ z;Xghrz8#lmb?mRas{HZ4+<}EY;9%CYliU)$hpxn+Ord8qFE zW{%iR9Srddbq*#X-{*YS`(~^)YVM3NsqgThYdZbpRo}O0uOeLwvYloc=$cgyN@2t?ic65mEK4&fEzwZ1b9;jT64p?i!Hjsg_ zKp(%chs3R%U5ZXe(5d~1-WuNb+#T!2b?=fqM;ttiuMr>Xjun3F%m>iUCf%g$fMk-2qJz>z+S=X%zLXW>t&CxHE3N=#3a@%VZ1rfk|s$q&BYp274ve3O8CiKwY@^nm&~IkBk@W zXjjB4)_u-ei(ErYR;JLy9Q;dPgXdl_G|RX@(T_H3)h~EmZWep1d`CIzU!70%;Qt*z zYcKSVy$j&My&}%>+>g=2d%fWPIXLn;%2=#flU00f!!6pmzS=pvb~4yod1r5^=1E7< zt+MZcd3j_BTQpNoDIfmF~I0>^0YJ+;7#P9ejUz$lOmZn&SD!C+ej+A7EXW z*yXYMh~`Fi;@Hi*2n^^6m&%734))mV<0 zsM;>)X8ndf0}i=CKFo)$;Q~6TdmH7^jcoHoVfpw((~t&HB&EV*F;s zCUzs=>gU;)k{W@^?t}9rFf4C>x&|J|F@uNraqWctIgU&0mJ7z9J*p$)73O@YBfkS@ z%N6$De!G^8Urb-A2a|OqF~h!%oWnl?2Y%K);kKoWpV6;p*oT}f-RRe zSmf@Zvd}`-SE^r>Ctu+I<*Ut~;@eV#P+1VerXTu3+KSviHCSeURrIc{i`xtQQR*}! z*J?}f(mlsg`ELTdwjO~oZV%rfW=a3I$P;*X@gcFz?_l96wr5QQ`!4rUufBXC$M!q_ z-=d#S`OSUuS;v`VY+{JoRb>@Ft_*JR{~b7a93Su6=N;Oa=8QfzYw@uFDj6NVQ z_cz6Ur{NLbf8^M~mF@1+zBMptGi#l4?Ooc`AHQL~=Gj)`&fnqiyY)HfwBpwJj+phC ze}MII@|5zm@v8DT<>#Cq_4xhJyf4~yJaaPg6m?MLIL7H6^_R-wW#rX@C$Phs zYpUx9#>~WB!N@eve1?8FTbeeMl{Hn!88DZtYo+4?e1@M(#F3V7brj1W95xGVj?hCR_TY_;9Vwnz?iiq z#Fm(FE#5feCHCW(R``zbi1+et!83A(pMA;CAwNgRpu5IW+p65}T}rf(zS{psE3Q3M zzY-e)3&=ZloA&TQ_ZysW?j`u?Ae&YABWp?Q6}iu6TVPc=u}39)3?9Od?`T6iTVuXp zJZfLLM?3ioe13U_+{TD?`*~d(8HB%H@w)e3WnPVr*TJk~pCvbq&dLckdPdIkod3~z zd{m0f^E~EHf?b>*aMR`Mb1oaoefPW0GAd@3H!*e`L! zy7V-hvjw->j`p&HtsTPc_>joKxZD_){XnTnpzJt1VPDj3*@wHuLboQgdflF?XT0JI z-~#OjKJhu>&J*@`d*?Fsu~WNSJZpQ%HhtJ*PhHwXM$W;+q`0C^TsdT%7x=5Mo=*cu z;%cARp14d7%o!+SqqU#l(pJqaJ?8uNd$k{5Mb1WiJs@rv;C06>4?0hs!A4i$P5f=< zw9XaHMcVHs#tmO?GM5XU^*yxd{ddN=a*49|8Qna!Uz`rWy{>88<@Z4C1LMYC=qH#CKX|TKENt@m z)N{rb51I2EGgoq-`ET^CpZ5;1EwGe(ZkEBiws#d9MOS4WZWg2R^;Q1A&GS9O%o#lS zgL^73#Wygo4F~BDz(N_Jjk?YeUs~pg(>RM9%(zF*XS>(>4*e%?^)8phQtENnxCmWp z%hnnnXZ||f3l3Quy3g2@r+L;p=ny^$CTEDVSFjP}RQ8$w`Ca3RZSuTrKI53K(f7yb z-xz|}2fqF8pKJWS%~%^gwB~%)R@J{XeZ}}NItNq6L*)j1sD8}HpTl?8!Qu_xBQ6V; z$$iG2_lW7Q(w3NNFrTwV%J3RoE%u1FDv$Tpe)KUn@$MPyE^+=2ajjUfy#e0ie%I_- z9pL@YF*gUd{YF2v^ z+O`Mye*vDr#=^8?@$@nKQHfQ` z3ovTkJ8je2{RiOZOAG%6*Bh6PHqTZM-0cwTb-DNiyq$vIvsa9TJtWqy?(n%qa3Cj= zC&|5>=j6H`@qha*d`V7-J@MhSok{a4tY71UnIDvG_GI6~m(Rls-MW_Q={93D4ilfo zk>sGuCVf4^r)YoJS9r)hT;`d;PHgLdaT)*l%pu0?oyWGr`IyA)^4kmgxYFNn8*7%g zz#?NVa!q$1lw2(z-m1?H*Qr-AtBmBuZG87Wym!hxNDh3C4c-C|$Thy@5ZUQFjb}Z_ z#(tb{IODnHK7QsY-{Vfx_+Raw8raeC)oQ<4mnJ^1c8niopKR8VKKHoD0%7f&palE4*vp`X)0@>#~(GVoK}6 zYX{o?5!~^WwWnYCUmJLcFPg?jixE1YfpmAB;(EA|LIgP0X(!-|IoQ*abBn^4xoTp1zk!UTgNONB*w=QUfS{^CkQ= z$Y;FoI9v_S;d3%qVy|QLijUB~6I&wxaCNhOOFt@Jz;>A)sIsx&-5j}VN%Xg@qjTaS z^`|^iH~TiWtGzvDt-y8JN$k((Y!Me4o6xUtF!645cu1UbLN3_4zysjWSg(!TnAagA z`b~e~n{F-M_B_uL;%KO%2)z)S4I@f_< zPkzKt&`+_-`bK2;5sZ_&h!4cJ%h69YrtC#OfAP6Caic!5e;ysN_N6R|IWq5^L$>N2 zzfg$fXoq@I@NF-AvCntTz^vcx<5|XfN9q^*{mQ<5=J~<$R;$_tcheX{mEZAM`WZjp zMy_kbE@Eg8+?{}7eZTWL=CRq^GRq#B+kEd2{$FMurM}>a;QSBzWK3kNC&yU}0M3ja zoomG>fiq=^Z*5|mD(7bYQI?3^R+%$lbCF{Qy^Ggfcv+vzod~fxY?V42jFC83U*Y`Z zE-|y*r2fERc?qYk{dy@lu{P67-iw_wM&nY>eDJK={zGIN?BPHAk)QL9v7U-40aPiaIog_F3B3 z9=t3*j=`OJkaza+o9c-3?tU-1Ipa&equo_K*1V$6^*LWhgRfwPwffxOya5*;GG}k@ zR!=_PaqYnsX%jB;EUv!Cd(>v(oh|r!fEY!)Fy~_2uf2=w2gqK#oaX!RZEX3Zuj0kr zj2Ie$v#kZ_o)-5XcF+4%+*Le}@Lk)q2ClKwZ`d*Q{HmWJekbqyZN8yAf8(?F=%;>% zzPPSiPKPV+^`Xn{R%16j?})t9pZF1d194~BpbtCFbMce+=>MO*?%o^i%Xse|&%efN zw|P(hvWKr$5AxSt?1=hF^rd2#ewS(dfMZt=>gcY0{|jv4>*21%HQqm<-tDjUi{00; z;gj`ayZjvRBM$y#KC#N@(MMw18}J2v3?GX_V%WrNOUQH!4DT^lu%5;+IJZB}8BT~b z&e3&hnlO%GUN`TdJ|6Ns^PAT`)^X~4^o#CUxWjLCYiuE|y~C38cj?D%`ZYpq*Oh~N zUyUan&s{!CY?B&BC;VowSGkWYjdi>q%J}I%pB4A&T{);npS6OlsFzg6IpgOX$@u>^ zy7ieyy>~l8Gze_x#%$2uu0zbP=tb)uu7m??>=5Kw99(4wHduJA0sh+%# zFZjIy&uc@<%~~SHJUjRw>qcIq4Q1^dO>9n)bJJF=xv@+P?-~p^$#}2{YC$G;a}6Q= z<=jQ$HP;t8A5xZxQN24uyq=IF_DuCCf6uUoT254!#;mNBlpDM^#oykO!?SDO-9F6{ciXnXmCv)b zu{hyAhG2UXF2qj-Bkp4xpr6E0We%US@&n^UH@m#A|F?~WG3NR_a{@UiW9gm_?-KSIS1@(s9CQfJ~;x%$f9D0*YENfaleMow*K28@89N`#0#-+ z)}Zoy{7ad}WuAmY~O-w#2q>fmaUTrPi9>~JYS`qTl~-7+SnShimtEn`vb4H$E#e$I^3PS z>v&5{)VlcGgO`}>78%X)xzYMf0DKYqmcTI_n>O5LsfQ z`kry*`+#0KhZaIY?&VPij+ch>Ezh8Z%vD5|e zzdR0?l=aK-2;+7`epYR;{(b& z_-JzQ8&4*Wxs6^9nfE{9{aN_C>X+D`HkezM4)I{Kr=cvs2m8oed+gSbz`PMK0R-=IDYPWK-=ZN*0%0Rowc*xnVz>9E8aQVMHSDidyo;Jp7 z@&R$$Kd1bh^J84_zr6n^@6-3#?<#iH_~CMj4gJacZJueHYs4M&FMZc;#pxdL3HSOq zFC~^?oWCGn_VZqcPu^kc=p%R5E`fD%w*`MP2R29f?|ppWO3s*pr^Ku4> zt7L`vP#^XuW74nq8T)44C~Lpn;q%}v+-aO;Zq<3+_OI+uK=#@jIp}h`k-zuKiWU7S z^~l1Ht}DFZe`~88^}|`e(L8n_3rqszr$Sx+^gX_ELfqf`@G&^?Ant1hgSKl`Uxg^ zrnnI^avt+!F(odn$MG$X;eKw{Z@m9@n{n;IhfSV1>kHKLNev@y&@~IW?j3EO@W1zR z)5py9l~L>>`d06{PZu(rL+sj|BlzD_`7?4#yZ;KQT+bG z>#hgc)+jPZpIP7SVE@P_eCOD~yO{fi-#i<6+rE3=`iK#H#snPYd|BSW2BQC+-(myI z{i}WS;nR#sT|W?SVtR|%f_>NSv5xKZFM(6$qBGdJSXsiya>l00WFEiYs&f_VC-36l z8o6XHv(_ShX58A=bAH5UaER?A+kddXavj^d$=~{hQS4j)i)|z>t>+SIp6J6Lv7hMX z&P^MH<tL$_Y63o}z2|cWkjk8=g`9$nRM`bMR-4krUftPv|G> znDxG+V9mTtvH#Qb)&ALkYt$?E0pz|$Tz$mc)Hxw|h`rAtLu(#hWo&R=#@2xg#m+AJ zly|Q3H~RqMd&4C?m79%K)V=2q58y^}fb_fC5O%;Fjx}~-jfS;@I%o8*a`yr0FSSi% zim#;oPF=rq-Uctn_kkhqKts>1%7o z@)v!V6J1C49(v=rOSJ1=ed4P!%6Ror$SWAU#B0A1Bf7`^34hNqF74P@POdkXEkB5{ z6>w_1#6T5i({qP3i2d-{zw+K6awVT5$C5ogVDX>H+J5%BTLaX!RAXg*_FZDpWAaPP|H>cuy}P`Q ze99|q?gO&@1ou^+4WIm6xypGUab;wpJ&U7t^6J<4Ehpo{Qw#V5?ghIr-{l$f&%KuA_jcuG>OMqX?&UaV52iWryTl^lN^->4(G`8q zoE(49+`m`t4_Rl;Xq#t<5#!rsURyzLU?}{i&OhVVY}ed2FUQa}c6BNIV!Y`% z<&*(*x5fYXkbjINI6EFa(1-XKeSq^V$If~2GEOWr-O6}^LE|^qF0@mhBkxvjq%ZU{ zd!&dVwPkJJK6l84Xw%-^utuE8xsk}^A$@tnXW+i@iEEh5iBiw)A$^D2gB8cK4o{2I ze1>+WZKKmX2VH7Uhy2JTV&D zJe$72GjDC?wCw!}4qW?IzsA(I=^FVn#_Bk==f&q;Suv*|cGgzc*cT}l#k0AtQNE`i z;QV>&h-e4I0P$7ggXf#4XI-<-L3)YP_)Zxcp&$57Wx0dCtx+}Gs`hOSAh1%`g}{zj z7Z*MF>gMjivW!o69)#Y?HaetDu@??j=W?6*2c920_x@#L_phVh2XBY$3FzT}Wus0$ zqpx*7p&`3&ZU}v&@U#2c!*zE1piA{zzH_xUBLa=&_mk8J~Afn)D{b3 z3VFqE$n~48=qWb(68ZD|_y&B3bu7vVGEtx5Ond^qKXKSP_Vs^>!L`Ace0CCENbE$6 zs6G5&Ub{yh#IO8yM0|0=-(tx5NgsMu$6X(H3KlN#8{X+Y$XsxYSl>9=x#m7|lmp_; zd*lrI_zu1!`I+uqPdT2G+tvpd4=@)=?YQ=>iqq|0^iNE2jrZWj?EhFN=L6=$Df-*r z7>69BPt;%DM-TL`%)rm;+qmgIztxR%AUXPgA3634{*Ao?iEXHD5S^d#-Z?)P{HXUU zd{24Ue=%u{VqZu2aV|~!*++srVq2**#`yP;x%-&iuY3%TeWBm>k7u!`q>&}_IQK!h zZ;Iy^>uQrXiyn;ue@8Cj*I0qJ%K^{OSJ`Lo3+9@!F}rXZ;^dpjsBx+ zef&k8-zE6Fqd0-f*orvY1>zMy^qf$-`KKzXN`R8ZHbLGde9FscClV=^4(d+B9~H|v57ruF5Z1j z?`$7^EMcE3J@JXT-=d3OW0s9S>ONBM*dUMp?H(v=mB3l$>$^+(wK52o&`xX#UMP#$ z_*$#>Mb6Ov9A}#tUOc$|?ztfE``af5);|)5l^4v(&rxBNeZ50T@vUp^aNHpgRs2AFR=M~~zEjc-LyTfDx*+ORw~z~9`R z8BSCFIWzZwzG0hRS&MMaj{T;t4Z1Z)W?YcDnd7qVGi%||nfuo|yfy`2dk>NRjkyPT zF51XEvaV%`#Wr(h``q+5HM`)ve~d9k!K66RCf4|z{^9|AMBRhp9TB^{r>-2|4r@-X zHIMRlhjy)ddX4w7OXm}1g1_~()+UjM_WApieIc*GPjh!j>fdSmV&6SEaC-7Fa)q`2 z&_(qX=ysDhL44ley%+e|*StsDvFjD)6zbqxY)cGsgJ+2~Yh5tj)Q*)8ZXhf4nfeUq z)H!vP9eS$vR`KiJYwh(a?eeU|CgwEbyWq&JR@b&NKaZ`D(@xHS+<4~ra`8S~C|}4q zuA^FGO&lB(Bb+0{UwOWIZ7>+U$nn4OnQ{7x3^PXVLPUn(g3oJTo`K~&Kw`xC)SESs4uK7RE&Z###|POf7JOpxIE)?>KMOBJH)=^IL|KQ zPgw&2v-HJzL-hmbC-;&DSMn2=&d)gEi}05I$9+TE z(B9AWj-NJjN#`+xaMCibZ~qiO%lg9i;XQ5Bdl|OjV=>H{Qugl+@^>4#+MkcaadO}@ zex{kn^=Wo@pz2W|`hw#}NaubUT_mz+B&vmRa>!aiovCABq^%ht}# zMSzz)6Z`W%^Q`rHS2Oa9PO$yRrv3bT=X7cNF5|m}T)nf$IO!IjQBTJ9TbJuvC^1j! zov;_LFc0jmwRZ3Mu#QP=aHu-XS)>X_uMU2;-jF87~< zi`33xJmQ=EeV2j<&I4tg@4TmS8}dcAbzZau_gf?P4L_`Vlm%iZc}sonbEc&`U!yLK z>lwkbd!Lj=^$Rt2Xfa;aN~kLX_u!kv2`+m826#Ka3K4}8(e@F=1t;2*-R7HZ=%NezC-&H1McCPbZ*I>fsG#$ zTa+IBmF;4Gsmpr8-{7O{nG0b~VtZgNeZohT^`GPO+xxPDI(y!12_GqT;9lnt z-udo6KQWWLyR?b@R*e@ry|sV29}%0A53q}J4DV~ZBk*J8YQ_SGC}->-&vs2SzN!`Z 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 literal 0 HcmV?d00001 diff --git a/ChomensJS/midis/NightOfNights.mid b/ChomensJS/midis/NightOfNights.mid new file mode 100644 index 0000000000000000000000000000000000000000..e3bfe61cc74b33de99234cde16a99de1be257fa1 GIT binary patch literal 679624 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
i`{K7}4dV_&9E=|fM`c?ooOp|P)y&uQ$#uSB&| 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 eiuJ { + if (bot.bruhifyText === '') return + + let hue = startHue + const displayName = bot.bruhifyText + const increment = (360 / Math.max(displayName.length, 20)) + const component = [] + for (const character of displayName) { + const color = convert.hsv.hex(hue, 100, 100) + component.push({ text: character, color: `#${color}` }) + hue = (hue + increment) % 360 + } + bot.core.run(`minecraft:title @a actionbar ${JSON.stringify(component)}`) + startHue = (startHue + increment) % 360 + }, 100) + + bot.on('end', () => { + clearInterval(timer) + }) + } +} diff --git a/ChomensJS/plugins/chat.js b/ChomensJS/plugins/chat.js new file mode 100644 index 0000000..e8bacc7 --- /dev/null +++ b/ChomensJS/plugins/chat.js @@ -0,0 +1,76 @@ +const { containsIllegalCharacters } = require('../util/containsIllegalCharacters') +const { chatPacketListener, parsePlayerMessages } = require('../util/chat') +const minecraftVersionToNumber = require('../util/minecraftVersionToNumber') + +function inject (bot, dcclient, config) { + bot.chatQueue = [] + bot._chatQueue = [] + + const _chatQueueInterval = setInterval(() => { + if (bot.chatQueue.length !== 0) { + if (containsIllegalCharacters(bot.chatQueue[0])) { + bot.chatQueue.shift() + return + }; + // totallynotskidded™️ from mineflayer/lib/plugins/chat.js + for (const subMessage of bot.chatQueue[0].split('\n')) { + if (!subMessage) return + let smallMsg + for (let i = 0; i < subMessage.length; i += config.chat.messageLength) { + smallMsg = subMessage.substring(i, i + config.chat.messageLength) + bot._chatQueue.push(smallMsg) + } + } + bot.chatQueue.shift() + } + }, 0) + + const chatQueueInterval = setInterval(function () { + if (bot._chatQueue.length !== 0) { + if (bot._chatQueue[0].startsWith('/') && minecraftVersionToNumber(bot.version) >= 1.19) { + // totallynotskidded™️ from mineflayer + const command = bot._chatQueue[0].slice(1) + const timestamp = BigInt(Date.now()) + bot._client.write('chat_command', { + command, + timestamp, + salt: 0n, + argumentSignatures: [], + signedPreview: false, + messageCount: 0, + acknowledged: Buffer.alloc(3), + previousMessages: [] + }) + } else { + bot._client.chat(bot._chatQueue[0]) + } + + bot._chatQueue.shift() + } + }, 450) + + bot.chat = (message) => { + bot.chatQueue.push(String(message)) + } + + bot.on('end', () => { + clearInterval(chatQueueInterval) + clearInterval(_chatQueueInterval) + }) + + function listener (packet) { + chatPacketListener( + packet, + bot, + minecraftVersionToNumber(bot.version) >= 1.19 + ) + } + // TODO: support playerChat (formattedMessage doesn't exist on kaboom so prefixes like [OP] doesn't appear) + // bot._client.on('playerChat', listener) + bot._client.on('systemChat', listener) + bot._client.on('chat', listener) + + bot.on('message', (message, parsedMessage) => parsePlayerMessages(message, parsedMessage, bot)) +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/cloop.js b/ChomensJS/plugins/cloop.js new file mode 100644 index 0000000..5547fbb --- /dev/null +++ b/ChomensJS/plugins/cloop.js @@ -0,0 +1,25 @@ +function inject (bot) { + bot.cloop = { + list: [], + add (command, interval, list = true /* list is used in the cloop command listing and eaglercrash */) { + const id = setInterval(() => bot.core.run(command), interval) + + const thingsToPush /* ig not the best variable name */ = { id, interval, command, list } + bot.cloop.list.push(thingsToPush) + + return thingsToPush + }, + remove (item) { + clearInterval(bot.cloop.list[item].id) + + bot.cloop.list.splice(item, 1) + }, + clear () { + for (const interval of bot.cloop.list) clearInterval(interval.id) + + bot.cloop.list = [] + } + } +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/commands.js b/ChomensJS/plugins/commands.js new file mode 100644 index 0000000..e970827 --- /dev/null +++ b/ChomensJS/plugins/commands.js @@ -0,0 +1,123 @@ + +const path = require('path') +const { EmbedBuilder } = require('discord.js') +function inject (bot, dcclient, config) { + const loadFiles = require('../util/load_files') + const channeldc = dcclient.channels.cache.get(config.discord.servers[`${bot.server.host}:${bot.server.port}`]) + bot.command_handler = {} + bot.command_handler.commands = {} + bot.command_handler.reload = async function () { + bot.command_handler.commands = await loadFiles(path.join(__dirname, config.commandsDir)) + } + bot.command_handler.reload() + bot.command_handler.main = function (prefix, username, message, sender, channeldc, hash, ownerhash, selector) { + bot.command_handler.reload() + let raw + let command + const discord = !!message.content + + discord + ? raw = message.content.substring(prefix.length) + : raw = message.substring(prefix.length) + + const [commandName, ...args] = raw.split(' ') + command = bot.command_handler.commands.find((command) => command.name === commandName.toLowerCase()) + + try { + const alias = bot.command_handler.commands.find((command) => command.alias.includes(commandName.toLowerCase())) + if (alias) command = alias + + if (prefix === '3*' && message.endsWith('3*') && message !== '3*') return + if (!command) throw new Error(`Unknown command: "${commandName}"`) + + if (command.trusted > 0) { + const discordRoles = message.member?.roles?.cache // do i need the "?"s ? + + // TODO: Don't hardcode the roles + + // trusted and host + // discord + if ( + discord && + command.trusted === 1 && + !discordRoles.some((role) => role.name === 'Trusted' || role.name === 'chomens' || role.name === 'FNFBoyfriendBot Owner') + ) throw new Error('You\'re not in the trusted role!') + // in game + if ( + !discord && + command.trusted === 1 && + args[0] !== hash && + args[0] !== ownerhash + + ) throw new Error('Invalid hash') + + // FNFBoyfriendBot Owner + // || role.name === 'Host' + if ( + discord && + command.trusted === 2 && + !discordRoles.some((role) => role.name === 'chomens' || role.name === 'FNFBoyfriendBot Owner') + + ) throw new Error('You\'re not in the host role!') + // in game + if ( + !discord && + command.trusted === 2 && + args[0] !== ownerhash + ) throw new Error('Invalid OwnerHash') + } + + if (prefix === config.discord.prefix) { + if (!command.discordExecute) throw new Error('This command is not yet supported on Discord!') + command.discordExecute(bot, username, sender, prefix, args, channeldc, message, config) + } else { + command.execute(bot, username, sender, prefix, args, config, hash, ownerhash, selector) + } + } catch (e) { + if (prefix === config.discord.prefix) { + const Embed = new EmbedBuilder() + .setColor(config.discord.embedsColors.error) + .setTitle('Error') + .setDescription(`\`\`\`${e}\`\`\``) + channeldc.send({ embeds: [Embed] }) + } else { + bot.tellraw(selector, { text: String(e), color: 'red' }) + } + } + } + bot.command_handler.run = function (username, message, sender, channeldc, hash, ownerhash, selector = '@a') { + for (const prefix of config.prefixes) { + if (!message.startsWith(prefix)) continue + bot.command_handler.main(prefix, username, message, sender, channeldc, hash, ownerhash, selector) + } + } + bot.on('chat', async (_username, _message) => { + const username = _username?.replace(/§.?/g, '') + const sender = bot.players.list.find((val) => val.name === username)?.UUID + const message = _message?.replace(/* /§r/g */ /§.?/g, '')/* .replace(/§/g, '') */ + bot.command_handler.run(username, message, sender, channeldc, bot.hash, bot.ownerHash) + }) + bot.on('cspy', async function (_username, _message) { + const username = _username.replace(/§.?/g, '') + const message = _message.replace(/§.?/g, '') + const sender = bot.players.list.find((val) => val.name === username)?.UUID + bot.command_handler.run(username, message, sender, channeldc, bot.hash, bot.ownerHash, username) + }) + function handleDiscordMessages (message) { + try { + // ignores the message that comes from the bot itself + if (message.author.id === dcclient.user.id) return + // only receive messages in SPECIFIC channel + if (message.channel.id !== channeldc.id) return + if (!message.content.startsWith(config.discord.prefix)) return + bot.command_handler.main(config.discord.prefix, message.member.displayName, message, 'no sender for discord', channeldc) + } catch (e) { + bot.console.error(e.stack) + }; + } + bot.on('end', () => { + dcclient.off('messageCreate', handleDiscordMessages) + }) + dcclient.on('messageCreate', handleDiscordMessages) +}; +module.exports = { inject } diff --git a/ChomensJS/plugins/console.js b/ChomensJS/plugins/console.js new file mode 100644 index 0000000..b39dc2b --- /dev/null +++ b/ChomensJS/plugins/console.js @@ -0,0 +1,107 @@ +const moment = require('moment-timezone') + +function inject (bot, _dcclient, config, rl) { + // readline > fix on log + function log (...args) { + rl.output.write('\x1b[2K\r') + console.log(args.toString()) + rl._refreshLine() + }; + + const chatMessage = require('prismarine-chat')(bot.version) + + function prefix (prefix, _message) { + const message = `[${moment().format('DD/MM/YY HH:mm:ss')} ${prefix}§r] [${bot.server.host}] ` + const component = chatMessage.MessageBuilder.fromString(message).toJSON() + return chatMessage.fromNotch(component).toAnsi() + _message + } +const originalConsole = console + this.log = (...args) => { + rl.output.write('\x1b[2K\r') + originalConsole.log(args.toString()) + rl._refreshLine() + } + bot.console = {} + bot.console.host = 'all' + bot.console.log = function (message) { + log(prefix('&6LOG', message)) + } + bot.console.info = function (message) { + log(prefix('&aINFO', message)) + } + bot.console.error = function (error) { + log(prefix('&cERROR', typeof error === 'string' ? error : error.stack)) + } + + // previous message is op feature to have in console :) + let previousMessage = '' + bot.on('message', (message) => { + if (!bot.options.logging) return + if (previousMessage === message.toString()) return + previousMessage = message.toString() + bot.console.log(message.toAnsi()) + }) + + if (!config.console) return + + function handleLine (line) { + try { + if (line.toLowerCase() === '' || + line.toLowerCase().startsWith(' ')) return + + if (line.startsWith('.csvr ')) { + const host = line.substring(6) + for (const eachBot of bot.getBots()) eachBot.console.host = host + bot.console.info(`Host set to: ${host}`) + return + } + + if (bot.server.host !== bot.console.host && bot.console.host !== 'all') return + if (line === '.kill') process.exit() + + if (line.startsWith('.')) { + return bot.command_handler.run( + bot.username, + config.prefixes[0] + line.substring(1), + bot.uuid, + null, + 'h', + 'o' + ) + } + bot.tellraw('@a', [ + { + text: '[', + color: 'dark_gray' + }, + { + text: `${bot.username} Console`, + color: 'gray' + }, + { + text: '] ', + color: 'dark_gray' + }, + { + text: 'chayapak ', + color: 'green' + }, + { + text: '\u203a ', + color: 'dark_gray' + }, + chatMessage.MessageBuilder.fromString('&7' + line) + ]) + } catch (e) { + bot.console.error(e) + } + } + + rl.on('line', handleLine) + + bot.on('end', () => { + rl.off('line', handleLine) + }) +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/core.js b/ChomensJS/plugins/core.js new file mode 100644 index 0000000..1852e3d --- /dev/null +++ b/ChomensJS/plugins/core.js @@ -0,0 +1,115 @@ +const nbt = require('prismarine-nbt'); +const Vec3 = require('vec3'); + +const relativePosition = new Vec3(0, 0, 0); + +function inject(bot, dcclient, config) { + const mcData = require('minecraft-data')(bot.version); + const impulseMode = !bot.options.kaboom; + const core = { + // Initialize the height to 0 + height: 0, + run(command) { + try { + // Check if height has reached the maximum configured height + if (core.height >= config.core.layers) { + // Reset the height to 0 and the relativePosition to (0, 0, 0) + core.height = 0; + relativePosition.x = 0; + relativePosition.y = 0; + relativePosition.z = 0; + } + + const location = { + x: core.start.x + relativePosition.x, + y: core.start.y + core.height, // Use the core height + z: core.start.z + relativePosition.z + }; + + if (impulseMode) bot.write('update_command_block', { location, command: '', mode: 0, flags: 0 }); + bot.write('update_command_block', { + location, + command: String(command).substring(0, 32767), + mode: impulseMode ? 2 : 1, + flags: 0b101 + }); + + // Increment the relativePosition.x and update the height accordingly + relativePosition.x++; + if (relativePosition.x >= 16) { + relativePosition.x = 0; + relativePosition.z++; + if (relativePosition.z >= 16) { + relativePosition.z = 0; + core.height++; // Increment the height + } + } + } catch (e) { + bot.console.error(e); + } + }, + fillCore() { + core.start = new Vec3( + Math.floor(bot.position.x / 16) * 16, + 0 /* bot.position.y */, + Math.floor(bot.position.z / 16) * 16 + ).floor(); + core.end = core.start.clone().translate(16, config.core.layers, 16).subtract(new Vec3(1, 1, 1)); + + placeCore(); + } + }; + + bot.core = core; + + function placeCore() { + try { + const fillCommand = `minecraft:fill ${core.start.x} ${core.start.y} ${core.start.z} ${core.end.x} ${core.end.y} ${core.end.z} repeating_command_block{CustomName:'${JSON.stringify(config.core.customName)}'}`; + const location = { x: Math.floor(bot.position.x), y: Math.floor(bot.position.y) - 1, z: Math.floor(bot.position.z) }; + + bot.write('set_creative_slot', { + slot: 36, + item: { + present: true, + itemId: impulseMode ? mcData.itemsByName.command_block.id : mcData.itemsByName.repeating_command_block.id, + itemCount: 64, + nbtData: nbt.comp({ + BlockEntityTag: nbt.comp({ + Command: nbt.string(fillCommand), + auto: nbt.byte(1), + TrackOutput: nbt.byte(0) + }) + }) + } + }); + + bot.write('block_dig', { + status: 0, + location, + face: 1 + }); + + bot.write('block_place', { + location, + direction: 1, + hand: 0, + cursorX: 0.5, + cursorY: 0.5, + cursorZ: 0.5, + insideBlock: false + }); + } catch (e) { + bot.console.error(e); + } + } + + bot.on('position', bot.core.fillCore); + + const interval = setInterval(bot.core.fillCore, config.core.refillInterval); + + bot.on('end', () => { + clearInterval(interval); + }); +} + +module.exports = { inject }; diff --git a/ChomensJS/plugins/discord.js b/ChomensJS/plugins/discord.js new file mode 100644 index 0000000..c375901 --- /dev/null +++ b/ChomensJS/plugins/discord.js @@ -0,0 +1,178 @@ + +const { escapeMarkdown } = require('../util/escapeMarkdown') +async function inject (bot, dcclient, config) { + const chatMessage = require('prismarine-chat')(bot.version) + const channel = dcclient.channels.cache.get(config.discord.servers[`${bot.server.host}:${bot.server.port}`]) + + let queue = '' + const queueInterval = setInterval(() => { + if (queue === '') return + + channel.send({ + content: '```ansi\n' + queue.substring(0, 1986) + '\n```', + allowedMentions: { + parse: [] + } + }) + queue = '' + }, 1000) + + bot.on('message', (message) => { + const cleanMessage = escapeMarkdown(message.toAnsi(), true) + const discordMsg = cleanMessage + .replaceAll('@', '@\u200b') + .replaceAll('http', 'http\u200b') + .replaceAll('\u001b[9', '\u001b[3') + if (message.toMotd().startsWith('§8[§eChomeNS §9Discord§8] §c')) return + queue += '\n' + discordMsg + }) + + // handle discord messages!!! + async function handleDiscordMessages (message) { + // Ignore messages from the bot itself + if (message.author.id === dcclient.user.id) return + + // Only handle messages in specified channel + if (message.channel.id !== channel.id) return + if (message.content.startsWith(config.discord.prefix)) return + + try { + const attachmentsComponent = [] + if (message.attachments) { + for (const __attachment of message.attachments) { + const _attachment = [...__attachment] + const attachment = _attachment[1] // BEST WAY REAL!?/1?! + attachmentsComponent.push({ + text: message.content === '' ? '[Attachment]' : ' [Attachment]', // may not be the best fix + color: 'green', + clickEvent: { + action: 'open_url', + value: attachment.proxyURL + } + }) + } + } + const component = [ + { text: '[', color: 'dark_gray', bold:false, }, + { + text: 'FNF', + color: 'dark_purple', + bold:false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { + text: 'Boyfriend', + color: 'aqua', + bold:false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { + text: 'Bot', + color: 'dark_red', + bold: false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { + text: ' Discord', + color: 'blue', + bold: false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { + text: ']', + color: 'dark_gray', + bold: false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { + text: '[', + color: 'dark_gray', + bold: false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { + text: 'ChomeNS js ', + color: 'yellow', + bold:false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { + text: 'Bot', + color: 'yellow', + bold:false, + clickEvent: { + action: 'open_url', + value: 'https://discord.gg/GCKtG4erux' + } + }, + { text: '] ', color: 'dark_gray', bold:false, }, + { + text: message.member.displayName, + color: 'red', + clickEvent: { + action: 'copy_to_clipboard', + value: `${message.author.username}#${message.author.discriminator}` + }, + hoverEvent: { + action: 'show_text', + value: [ + { + text: message.author.username, + color: 'white' + }, + { + text: '#', + color: 'dark_gray' + }, + { + text: message.author.discriminator, + color: 'gray' + }, + '\n', + { + text: 'Click here to copy the tag to your clipboard', + color: 'green' + } + ] + } + }, + { text: ' › ', color: 'dark_gray' }, + chatMessage.MessageBuilder.fromString('&7' + message.content), + attachmentsComponent.length === 0 ? '' : attachmentsComponent + ] + bot.tellraw('@a', component) + } catch (e) { + + } + } + + bot.on('end', () => { + clearInterval(queueInterval) + dcclient.off('messageCreate', handleDiscordMessages) + }) + + dcclient.on('messageCreate', handleDiscordMessages) +}; + +module.exports = { inject } diff --git a/ChomensJS/plugins/draw.js b/ChomensJS/plugins/draw.js new file mode 100644 index 0000000..ceb6692 --- /dev/null +++ b/ChomensJS/plugins/draw.js @@ -0,0 +1,53 @@ +const convert = require('color-convert') + +// eslint-disable-next-line require-jsdoc +function inject (bot) { + /** + * draw which is totallynotskidded from ybot + * @param {buffer} data data buffer + * @param {*} info idk bout this + * @param {object} prefix prefix in the output compoenent + */ + function draw (data, info, prefix = {}) { + const pixels = [] + + // Data Buffer -> RGB Array + for (let i = 0; i < data.length; i += info.channels) { + pixels.push([ + data[i + 0], + data[i + 1], + data[i + 2] + ]) + } + + const rows = [] + + // RGB Array -> Rows Array + for (let i = 0; i < pixels.length; i += info.width) { + const row = pixels.slice(i, i + info.width) + + rows.push(row) + } + + const messages = [] + + for (const row of rows) { + const message = [{ ...prefix, text: '' }] + + for (const rgb of row) { + message.push({ + text: '⎮', + color: `#${convert.rgb.hex(rgb)}` + }) + } + + messages.push(message) + } + + for (const message of messages) bot.tellraw('@a', message) + } + + bot.draw = draw +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/hash.js b/ChomensJS/plugins/hash.js new file mode 100644 index 0000000..6abd021 --- /dev/null +++ b/ChomensJS/plugins/hash.js @@ -0,0 +1,18 @@ +const crypto = require('crypto') + +module.exports = { + inject: function (bot, dcclient, config) { + bot.hash = '' + + const interval = setInterval(() => { + const normalKey = process.env['chomensjs_key'] +const ownerHashKey = process.env['chomensjs_owner_key'] + bot.hash = crypto.createHash('sha256').update(Math.floor(Date.now() / 10000) + normalKey).digest('hex').substring(0, 16) + bot.ownerHash = crypto.createHash('sha256').update(Math.floor(Date.now() / 10000) + ownerHashKey).digest('hex').substring(0, 16) + }, 2000) + bot.on('end', () => { + clearInterval(interval) + + }) + } +} diff --git a/ChomensJS/plugins/music.js b/ChomensJS/plugins/music.js new file mode 100644 index 0000000..4824fec --- /dev/null +++ b/ChomensJS/plugins/music.js @@ -0,0 +1,190 @@ +const path = require('path') +const { Midi } = require('@tonejs/midi') +const { convertMidi } = require('../util/midi_converter') +const convertNBS = require('../util/nbs_converter') +const parseTXTSong = require('../util/txt_song_parser') + +const soundNames = { + harp: 'minecraft:block.note_block.harp', + basedrum: 'minecraft:block.note_block.basedrum', + snare: 'minecraft:block.note_block.snare', + hat: 'minecraft:block.note_block.hat', + bass: 'minecraft:block.note_block.bass', + flute: 'minecraft:block.note_block.flute', + bell: 'minecraft:block.note_block.bell', + guitar: 'minecraft:block.note_block.guitar', + chime: 'minecraft:block.note_block.chime', + xylophone: 'minecraft:block.note_block.xylophone', + iron_xylophone: 'minecraft:block.note_block.iron_xylophone', + cow_bell: 'minecraft:block.note_block.cow_bell', + didgeridoo: 'minecraft:block.note_block.didgeridoo', + bit: 'minecraft:block.note_block.bit', + banjo: 'minecraft:block.note_block.banjo', + pling: 'minecraft:block.note_block.pling' +} + +function inject (bot) { + bot.music = function () {} + bot.music.song = null + bot.music.loop = 0 + bot.music.queue = [] + let time = 0 + let startTime = 0 + let noteIndex = 0 + bot.music.skip = function () { + if (bot.music.loop === 2) { + bot.music.queue.push(bot.music.queue.shift()) + bot.music.play(bot.music.queue[0]) + } else { + bot.music.queue.shift() + } + resetTime() + } + + const bossbarName = 'chomens_bot:music' // maybe make this in the config? + + const selector = '@a[tag=!nomusic,tag=!chomens_bot_nomusic]' + + const interval = setInterval(async () => { + if (!bot.music.queue.length) return + bot.music.song = bot.music.queue[0] + time = Date.now() - startTime + /* + // bot.core.run('minecraft:title @a[tag=!nomusic] actionbar ' + JSON.stringify(toComponent())) + + // is spamming commands in core as a self care a good idea? + // btw this is totallynotskidded™️ from my song bot except the bossbarName (above) + bot.core.run(`minecraft:bossbar add ${bossbarName} ""`) // is setting the name to "" as a placeholder a good idea? + bot.core.run(`minecraft:bossbar set ${bossbarName} players ${selector}`) + bot.core.run(`minecraft:bossbar set ${bossbarName} name ${JSON.stringify(toComponent())}`) + bot.core.run(`minecraft:bossbar set ${bossbarName} color yellow`) // should i use purple lol + bot.core.run(`minecraft:bossbar set ${bossbarName} visible true`) + bot.core.run(`minecraft:bossbar set ${bossbarName} value ${Math.floor(time)}`) + bot.core.run(`minecraft:bossbar set ${bossbarName} max ${bot.music.song.length}`) + */ + bot.core.run(`title @a actionbar ${JSON.stringify(toComponent())}`) + + while (bot.music.song?.notes[noteIndex]?.time <= time) { + const note = bot.music.song.notes[noteIndex] + const floatingPitch = 2 ** ((note.pitch - 12) / 12.0) + bot.core.run(`minecraft:execute as ${selector} at @s run playsound ${soundNames[note.instrument]} record @s ~ ~ ~ ${note.volume} ${floatingPitch}`) + noteIndex++ + if (noteIndex >= bot.music.song.notes.length) { + bot.tellraw('@a', [ + { + text: 'Finished playing ' + }, + { + text: bot.music.song.name, + color: 'gold' + } + ]) + + if (bot.music.loop === 1) { + resetTime() + return + } + if (bot.music.loop === 2) { + resetTime() + bot.music.queue.push(bot.music.queue.shift()) + bot.music.play(bot.music.queue[0]) + return + } + bot.music.queue.shift() + bot.music.song = null // useless? + if (!bot.music.queue[0]) { + bot.music.stop() + return + } + if (bot.music.queue[0].notes.length > 0) { + if (bot.music.queue.length !== 1) resetTime() + bot.music.play(bot.music.queue[0]) + return + } + } + } + }, 50) + + bot.on('end', () => { + clearInterval(interval) + }) + + bot.music.load = async function (buffer, fallbackName = '[unknown]') { + let song + switch (path.extname(fallbackName)) { + case '.nbs': + song = convertNBS(buffer) + if (song.name === '') song.name = fallbackName + break + case '.txt': + song = parseTXTSong(buffer.toString()) + song.name = fallbackName + break + default: + // TODO: use worker_threads so the entire bot doesn't freeze (for example parsing we are number 1 black midi) + + // eslint-disable-next-line no-case-declarations + const midi = new Midi(buffer) + song = convertMidi(midi) + if (song.name === '') song.name = fallbackName + break + } + return song + } + + bot.music.play = function (song) { + if (bot.music.queue.length === 1) resetTime() + } + + bot.music.stop = function () { + bot.music.song = null + bot.music.loop = 0 + bot.music.queue = [] + resetTime() + } + + function resetTime () { + time = 0 + startTime = Date.now() + noteIndex = 0 + bot.core.run(`minecraft:bossbar remove ${bossbarName}`) // maybe not a good place to put it here but idk + } + + function formatTime (time) { + const seconds = Math.floor(time / 1000) + + return `${Math.floor(seconds / 60)}:${(seconds % 60).toString().padStart(2, '0')}` + } + + function toComponent () { + const component = [ + // { text: '[', color: 'dark_gray' }, + // { text: 'ChomeNS Bot', color: 'yellow' }, + // { text: '] ', color: 'dark_gray' }, + // { text: 'Now Playing', color: 'gold' }, + // { text: ' | ', color: 'dark_gray' }, + { text: bot.music.song.name, color: 'green' }, + { text: ' | ', color: 'dark_gray' }, + { text: formatTime(time), color: 'gray' }, + { text: ' / ', color: 'dark_gray' }, + { text: formatTime(bot.music.song.length), color: 'gray' }, + { text: ' | ', color: 'dark_gray' }, + { text: noteIndex, color: 'gray' }, + { text: ' / ', color: 'dark_gray' }, + { text: bot.music.song.notes.length, color: 'gray' } + ] + + if (bot.music.loop === 1) { + component.push({ text: ' | ', color: 'dark_gray' }) + component.push({ text: 'Looping Current', color: 'green' }) + } + if (bot.music.loop === 2) { + component.push({ text: ' | ', color: 'dark_gray' }) + component.push({ text: 'Looping All', color: 'green' }) + } + + return component + } +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/players.js b/ChomensJS/plugins/players.js new file mode 100644 index 0000000..ecaf099 --- /dev/null +++ b/ChomensJS/plugins/players.js @@ -0,0 +1,136 @@ +const { EventEmitter } = require('events') + +class PlayerList { + list = [] + + addPlayer (player) { + this.removePlayer(player) + + this.list.push(player) + } + + hasPlayer (player) { + return this.getPlayer(player) !== undefined + } + + getPlayer (player) { + let identifier + + switch (typeof player) { + case 'object': + identifier = player.UUID + break + case 'string': + identifier = player + break + default: + throw new Error(`Get player called with ${player}`) + } + + return this.list.find((player) => [player.UUID, player.name].some((item) => item === identifier)) + } + + getPlayers () { + return Array.from(this.list) + } + + removePlayer (player) { + this.list = this.list.filter(({ UUID }) => UUID !== player.UUID) + } +} + +function inject (bot, dcclient, config) { + bot.players = new PlayerList() + + const tabCompletePlayerList = { + list: [], + interval: setInterval(async () => { + bot.write('tab_complete', { + text: '/scoreboard players add ' + }) + + const [packet] = await EventEmitter.once(bot._client, 'tab_complete') + + return packet.matches + .filter((match) => !match.tooltip) + .map(({ match }) => match) + }, 1000 * 3) + }//??? + + bot._client.on('player_info', async (packet) => { + for (const player of packet.data) { + switch (packet.action) { + case 0: + addPlayer(player, packet) + break + case 1: + updateGamemode(player, packet) + break + case 2: + updatePing(player, packet) + break + case 3: + updateDisplayName(player, packet) + break + case 4: + removePlayer(player, packet) + break + } + } + }) + + function addPlayer (player, packet) { + if (bot.players.getPlayer(player)) bot.emit('player_unvanished', player, packet) + else bot.emit('player_added', player, packet) + + bot.players.addPlayer(player) + } + + function updateGamemode (player, packet) { + const fullPlayer = bot.players.getPlayer(player) + + bot.emit('onPlayerGamemodeUpdate', player, packet) + + if (fullPlayer === undefined) return + + fullPlayer.gamemode = player.gamemode + } + + function updatePing (player, packet) { + const fullPlayer = bot.players.getPlayer(player) + + bot.emit('player_ping_updated', player, packet) + + if (fullPlayer === undefined) return + + fullPlayer.ping = player.ping + } + + function updateDisplayName (player, packet) { + const fullPlayer = bot.players.getPlayer(player) + + bot.emit('player_display_name_updated', player, packet) + + if (fullPlayer === undefined) return + + fullPlayer.displayName = player.displayName + } + + function removePlayer (player, packet) { + const fullPlayer = bot.players.getPlayer(player) + const players = tabCompletePlayerList.list + + if (fullPlayer && players.some((name) => name === fullPlayer.name)) { + bot.emit('player_vanished', player) + } else { + bot.emit('player_removed', player, packet) + bot.players.removePlayer(player) + } + } + + bot.on('end', () => { + clearInterval(tabCompletePlayerList.interval) + }) +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/position.js b/ChomensJS/plugins/position.js new file mode 100644 index 0000000..7d81341 --- /dev/null +++ b/ChomensJS/plugins/position.js @@ -0,0 +1,11 @@ + +function inject (bot) { + bot.position = { x: 0, y: 0, z: 0 } + bot._client.on('position', (position) => { + bot.position = position + bot.write('teleport_confirm', { teleportId: position.teleportId }) + bot.emit('position', position) + }) +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/proxy.js b/ChomensJS/plugins/proxy.js new file mode 100644 index 0000000..5d6f864 --- /dev/null +++ b/ChomensJS/plugins/proxy.js @@ -0,0 +1,129 @@ + +const util = require('util') +const mc = require('minecraft-protocol') +const { loadPlugins } = require('../util/loadPlugins') +const minecraftVersionToNumber = require('../util/minecraftVersionToNumber') + +function inject (bot, dcclient, config) { + if (!config.proxy.enabled) return + + let index + config.servers.forEach((server, _index) => { + if (bot.server.host !== server.host) return + index = _index + }) + + bot.proxy = {} + + const version = config.proxy.version + const srv = mc.createServer({ + 'online-mode': false, + port: 25566 + index, + keepAlive: false, + version + }) + + srv.on('login', (client) => { + bot.console.info(`[Proxy] ${client.username} connected to proxy`) + let clientEnded = false + // eslint-disable-next-line no-unused-vars + let targetEnded = false + + const target = mc.createClient({ + username: client.username, + host: bot.server.host, + port: bot.server.port, + version + }) + + const clientPacketBlacklist = [] + const targetPacketBlacklist = [] + + // should this be here or in the chat plugin? + target.sendMessage = function (message) { + if (message.startsWith('/') && minecraftVersionToNumber(target.version) >= 1.19) { + // totallynotskidded™️ from mineflayer + const command = message.slice(1) + const timestamp = BigInt(Date.now()) + target.write('chat_command', { + command, + timestamp, + salt: 0n, + argumentSignatures: [], + signedPreview: false, + messageCount: 0, + acknowledged: Buffer.alloc(3), + // 1.19.2 Chat Command packet also includes an array of last seen messages + previousMessages: [] + }) + } else { + target.chat(message) + } + } + + target.on('login', (packet) => { + bot.console.info(`[Proxy] ${client.username} target logged in`) + target.entityId = packet.entityId + loadPlugins(bot, null, config, null, target, client, true, clientPacketBlacklist, targetPacketBlacklist) + }) + + target.on('packet', (data, meta) => { + if (!clientEnded && + meta.state === mc.states.PLAY && + client.state === mc.states.PLAY && + !targetPacketBlacklist.includes(meta.name) + ) client.write(meta.name, data) + }) + + target.on('error', () => {}) + + target.on('end', targetEndListener) + target.on('kick_disconnect', ({ reason }) => targetEndListener(JSON.parse(reason))) + target.on('disconnect', ({ reason }) => targetEndListener(JSON.parse(reason))) + + function targetEndListener (reason) { + target.end() + client.end(`Target disconnected with reason: ${util.inspect(reason)}`) + targetEnded = true + } + + client.on('end', () => { + clientEnded = true + target.end() + target.removeAllListeners() + client.removeAllListeners() + bot.console.info(`[Proxy] ${client.username} ended`) + }) + + client.on('error', () => { + clientEnded = true + target.removeAllListeners() + client.removeAllListeners() + bot.console.info(`[Proxy] ${client.username} got error`) + }) + + client.on('packet', (data, meta) => { + if (clientPacketBlacklist.includes(meta.name)) return + target.write(meta.name, data) + }) + + bot.proxy[client.username] = { + target, + client + } + + function botEndListener (reason) { + delete bot.proxy[client.username] + client.end(`Bot disconnected with reason: ${util.inspect(reason)}`) + bot.off('end', botEndListener) + } + bot.on('end', botEndListener) + }) + + bot.on('end', () => { + srv.close() + srv.removeAllListeners() + }) +}; + +module.exports = { inject } diff --git a/ChomensJS/plugins/proxy/chat.js b/ChomensJS/plugins/proxy/chat.js new file mode 100644 index 0000000..d5733c0 --- /dev/null +++ b/ChomensJS/plugins/proxy/chat.js @@ -0,0 +1,16 @@ + +const { chatPacketListener, parsePlayerMessages } = require('../../util/chat') +const minecraftVersionToNumber = require('../../util/minecraftVersionToNumber') +function inject (bot, client, target) { + function listener (packet) { + chatPacketListener(packet, target, minecraftVersionToNumber(target.version) >= 1.10) + } + target.on('systemChat', listener) + target.on('chat', listener) + + target.on('message', (message, packet) => { + parsePlayerMessages(message, packet, target) + }) +}; + +module.exports = { inject } diff --git a/ChomensJS/plugins/proxy/custom_chat.js b/ChomensJS/plugins/proxy/custom_chat.js new file mode 100644 index 0000000..3f74ee2 --- /dev/null +++ b/ChomensJS/plugins/proxy/custom_chat.js @@ -0,0 +1,58 @@ +const minecraftVersionToNumber = require('../../util/minecraftVersionToNumber') + +function inject (bot, client, target, config, clientPacketBlacklist) { + const { MessageBuilder } = require('prismarine-chat')(bot.version) + clientPacketBlacklist.push('chat') + clientPacketBlacklist.push('chat_message') + client.on(minecraftVersionToNumber(target.version) >= 1.19 ? 'chat_message' : 'chat', (data) => { + // not the best place to put command handler thing here but ok + if (data.message?.startsWith('.')) { + return bot.command_handler.run( + client.username, + config.prefixes[0] + data.message.substring(1), + client.uuid, + null, + 'h', // real hash hardcode + 'o', + client.username, + true, + client, + target + ) + } + + if (!data.message?.startsWith('/')) { + const codeParsedMessage = data.message.replace(/%[^%]+%/g, (code) => { + try { + // eslint-disable-next-line no-eval + return eval(code.substring(1).slice(0, -1)) + } catch (e) { + return code + } + }) + bot.tellraw('@a', { + color: 'dark_gray', + translate: '[%s] [%s] %s \u203a %s', + with: [ + { + text: 'Chat', + color: 'gray' + }, + { + text: 'Proxy', + color: 'gray' + }, + { + selector: client.username, + color: 'green' + }, + MessageBuilder.fromString('&7' + codeParsedMessage) + ] + }) + } else { + target.sendMessage(data) + } + }) +}; + +module.exports = { inject } diff --git a/ChomensJS/plugins/proxy/self_care.js b/ChomensJS/plugins/proxy/self_care.js new file mode 100644 index 0000000..b5213d7 --- /dev/null +++ b/ChomensJS/plugins/proxy/self_care.js @@ -0,0 +1,48 @@ + +function inject (bot, client, target, config) { + let cspy = false + let op = true + // let gameMode = 1 + + target.on('message', (data) => { + if (data.toString() === 'Successfully enabled CommandSpy' || data.toString() === ' Enabled your command spy.' || data.toString() === ' Your command spy is already enabled.') cspy = true + if (data.toString() === 'Successfully disabled CommandSpy' || data.toString() === ' Disabled your command spy.') cspy = false + }) + + target.on('entity_status', (data) => { + if (data.entityId !== target.entityId) return + + switch (data.entityStatus) { + case 24: + op = false + break + case 28: + op = true + break + } + }) + + // target.on('game_state_change', (data) => { + // if (data.reason !== 3) return + // + // gameMode = data.gameMode + // }) + // + // target.on('login', (data) => { + // gameMode = data.gameMode + // }) + + const interval = setInterval(() => { + if (bot.options.kaboom) { + if (!op && config.self_care.op) target.sendMessage('/minecraft:op @s[type=player]') + if (!cspy && config.self_care.cspy) target.sendMessage('/commandspy:commandspy on') + } + // if (gameMode !== 1 && config.self_care.gamemode) target.sendMessage('/minecraft:gamemode creative @s[type=player]') + }, config.self_care_check_interval) + + bot.on('end', () => { + clearInterval(interval) + }) +}; + +module.exports = { inject } diff --git a/ChomensJS/plugins/self_care.js b/ChomensJS/plugins/self_care.js new file mode 100644 index 0000000..1b8ec58 --- /dev/null +++ b/ChomensJS/plugins/self_care.js @@ -0,0 +1,90 @@ + +function inject (bot, dcclient, config) { + let vanish = false + let nickname = true + let socialspy = false + let cspy = false + let prefix = false + + let op = false + let gameMode = 1 + let muted = false + + bot.on('message', (data) => { + if (data.toString() === 'You are now completely invisible to normal users, and hidden from in-game commands.') vanish = true + if (!bot.visibility && data.toString() === `Vanish for ${bot.username}: disabled`) vanish = false + + if (data.toString() === 'You no longer have a nickname.') nickname = true + if (data.toString().startsWith('Your nickname is now ')) nickname = false + + if (data.toString() === `SocialSpy for ${bot.username}: enabled`) socialspy = true + if (data.toString() === `SocialSpy for ${bot.username}: disabled`) socialspy = false + + if (data.toString().startsWith('You have been muted')) muted = true + if (data.toString() === 'You have been unmuted.') muted = false + + if (data.toString() === 'Successfully enabled CommandSpy' || data.toString() === ' Enabled your command spy.' || data.toString() === ' Your command spy is already enabled.') cspy = true + if (data.toString() === 'Successfully disabled CommandSpy' || data.toString() === ' Disabled your command spy.') cspy = false + + if (data.toString() === 'You now have the tag: [ChomeNS Bot]' || // for 1.19.2 (or 1.19?) and older clones + data.toString() === 'You now have the tag: &8[&eChomeNS Bot&8]' + ) { + prefix = true + return + } + if (data.toString().startsWith('You no longer have a tag')) prefix = false + if (data.toString().startsWith('You now have the tag: ')) prefix = false + }) + + bot._client.on('entity_status', (data) => { + if (data.entityId !== bot.entityId) return + + switch (data.entityStatus) { + case 24: + op = false + + bot.emit('deop') + break + case 28: + op = true + + bot.emit('op') + break + } + + bot.emit('entity_status', data) + }) + + bot._client.on('game_state_change', (data) => { + if (data.reason === 4 && config.self_care.endCredits) bot.write('client_command', { payload: 0 }) + + if (data.reason !== 3) return + + gameMode = data.gameMode + }) + + bot._client.on('login', (data) => { + gameMode = data.gameMode + }) + + const interval = setInterval(() => { + if (bot.options.kaboom) { + if (!prefix && config.self_care.prefix) bot.chat('/extras:prefix &8[&eChomeNS Bot&8]') + if (!op && config.self_care.op) bot.chat('/minecraft:op @s[type=player]') + if (!cspy && config.self_care.cspy) bot.chat('/commandspy:commandspy on') + } + + if (!vanish && config.self_care.vanish) bot.chat('/essentials:vanish enable') + //if (!socialspy && config.self_care.socialspy) bot.chat('/essentials:socialspy enable') + if (!nickname && config.self_care.nickname) bot.chat('/essentials:nickname off') + + if (gameMode !== 1 && config.self_care.gamemode) bot.chat('/minecraft:gamemode creative @s[type=player]') + if (muted && config.self_care.mute) bot.chat('/essentials:mute ' + bot.uuid) + }, config.self_care_check_interval) + + bot.on('end', () => { + clearInterval(interval) + }) +}; + +module.exports = { inject } diff --git a/ChomensJS/plugins/tellraw.js b/ChomensJS/plugins/tellraw.js new file mode 100644 index 0000000..a79aa7c --- /dev/null +++ b/ChomensJS/plugins/tellraw.js @@ -0,0 +1,12 @@ +function inject (bot, dcclient, config) { + const ChatMessage = require('prismarine-chat')(bot.version) + bot.tellraw = function (selector, message) { + if (bot.options.useChat && selector === '@a') { + bot.chat(ChatMessage.fromNotch(message).toMotd().replaceAll('\xa7', '&')) + return + } + bot.core.run(`minecraft:tellraw ${selector} ${JSON.stringify(message)}`) + } +}; + +module.exports = { inject } diff --git a/ChomensJS/plugins/tps.js b/ChomensJS/plugins/tps.js new file mode 100644 index 0000000..d9269d8 --- /dev/null +++ b/ChomensJS/plugins/tps.js @@ -0,0 +1,75 @@ +const clamp = require('../util/clamp') +function inject (bot, dcclient, config) { + const bossbarName = 'chomens_bot:tps' + + let enabled = false + bot.tps = { + on () { + enabled = true + }, + off () { + enabled = false + bot.core.run(`minecraft:bossbar remove ${bossbarName}`) + } + } + + const tickRates = [] + let nextIndex = 0 + let timeLastTimeUpdate = -1 + let timeGameJoined + + const interval = setInterval(() => { + if (!enabled) return + + const component = { + translate: 'TPS - %s', + color: 'gray', + bold: false, + with: [ + { text: getTickRate(), color: 'green' } + ] + } + bot.core.run(`minecraft:bossbar add ${bossbarName} ""`) + bot.core.run(`minecraft:bossbar set ${bossbarName} players @a`) + bot.core.run(`minecraft:bossbar set ${bossbarName} color yellow`) + bot.core.run(`minecraft:bossbar set ${bossbarName} visible true`) + bot.core.run(`minecraft:bossbar set ${bossbarName} style progress`) + bot.core.run(`minecraft:bossbar set ${bossbarName} name ${JSON.stringify(component)}`) + bot.core.run(`minecraft:bossbar set ${bossbarName} max 20`) + bot.core.run(`minecraft:bossbar set ${bossbarName} value ${Math.floor(getTickRate())}`) + }, 50) + + function getTickRate () { + if (Date.now() - timeGameJoined < 4000) return 'Calculating...' + + let numTicks = 0 + let sumTickRates = 0.0 + for (const tickRate of tickRates) { + if (tickRate > 0) { + sumTickRates += tickRate + numTicks++ + } + } + + const value = (sumTickRates / numTicks).toFixed(2) + if (value > 20) return 20 + else return value + } + + bot.on('login', () => { + nextIndex = 0 + timeGameJoined = timeLastTimeUpdate = Date.now() + }) + + bot._client.on('update_time', () => { + const now = Date.now() + const timeElapsed = (now - timeLastTimeUpdate) / 1000.0 + tickRates[nextIndex] = clamp(20.0 / timeElapsed, 0.0, 20.0) + nextIndex = (nextIndex + 1) % tickRates.length + timeLastTimeUpdate = now + }) + + bot.on('end', () => clearInterval(interval)) +} + +module.exports = { inject } diff --git a/ChomensJS/plugins/vm.js b/ChomensJS/plugins/vm.js new file mode 100644 index 0000000..26578bf --- /dev/null +++ b/ChomensJS/plugins/vm.js @@ -0,0 +1,46 @@ +const mc = require('minecraft-protocol') +const crypto = require('crypto') +const colorConvert = require('color-convert') + +const uuid = require('uuid-by-string') +const moment = require('moment-timezone') +const cowsay = require('cowsay2') +const cows = require('cowsay2/cows') +const { VM } = require('vm2') +const randomstring = require('randomstring') +const mineflayer = require('mineflayer') +const Vec3 = require('vec3') +function inject (bot) { + const chatMessage = require('prismarine-chat')(bot.version) + const mcData = require('minecraft-data')(bot.version) + bot.vmOptions = { + timeout: 2000, + sandbox: { + run (cmd) { + bot.core.run(cmd) + }, + mc, + mineflayer, + chat: bot.chat, + moment, + randomstring, + uuid, + chatMessage, + crypto, + colorConvert, + bruhifyText (message) { + if ( + typeof message !== 'string' + ) throw new SyntaxError('message must be a string') + bot.bruhifyText = message.substring(0, 1000) + }, + cowsay, + cows, + mcData, + Vec3 + } + } + bot.vm = new VM(bot.vmOptions) +}; + +module.exports = { inject } diff --git a/ChomensJS/replit_zip_error_log.txt b/ChomensJS/replit_zip_error_log.txt new file mode 100644 index 0000000..5b5e2c4 --- /dev/null +++ b/ChomensJS/replit_zip_error_log.txt @@ -0,0 +1 @@ +{"error":".zip archives do not support non-regular files","level":"error","msg":"unable to write file .cache/replit/modules/nodejs-18:v9-20230908-bb1b9fd","time":"2023-09-17T03:59:55Z"} diff --git a/ChomensJS/util/between.js b/ChomensJS/util/between.js new file mode 100644 index 0000000..2d7c3ba --- /dev/null +++ b/ChomensJS/util/between.js @@ -0,0 +1,13 @@ +module.exports = { + /** + * this code is from somewhere i can't remember... + * @param {Number} min + * @param {Number} max + * @return {Number} + */ + between: function (min, max) { + return Math.floor( + Math.random() * (max - min) + min + ) + } +} diff --git a/ChomensJS/util/chat.js b/ChomensJS/util/chat.js new file mode 100644 index 0000000..a1f3db5 --- /dev/null +++ b/ChomensJS/util/chat.js @@ -0,0 +1,146 @@ +/** + * for the chat packet listener (in util cuz proxy + bot) + * @param {object} packet chat packet + * @param {object} bot bot + * @param {boolean} mc119 minecraft 1.19 or newer + */ +function chatPacketListener (packet, bot, mc119) { + // try catch prevents json parse error (happens with a custom server that sends an invalid json component for example) + try { + const ChatMessage = require('prismarine-chat')(bot.version) + + const parsedMessage = JSON.parse(mc119 ? packet.formattedMessage : packet.message) + // down here it prevents command set message + + // for ayunboom cuz its 1.17.1 + // VVVVVVVVVVVVVVVVVVVVVVVVVVVV + if (parsedMessage.extra) { + if (parsedMessage.extra[0].text === 'Command set: ') return + } + // for 1.18 or newer(?) + // VVVVVVVVVVVVVVVVVVVVV + if (parsedMessage.translate === 'advMode.setCommand.success') return + + const message = ChatMessage.fromNotch(mc119 ? packet.formattedMessage : packet.message) + + bot.emit('message', message, parsedMessage) + } catch (e) { + bot.console.error(e) + } +} + +/** + * new parse player messages, more accurate message real!11!! + * @param {object} _message prismarine-chat ChatMessage - unused in code but used in legacy parsing + * @param {object} parsedMessage parsed message in a js object + * @param {object} bot bot + */ +function parsePlayerMessages (_message, parsedMessage, bot) { + const ChatMessage = require('prismarine-chat')(bot.version) + const vanillaKeys = [ + 'chat.type.text', + 'chat.type.announcement', + 'chat.type.emote' + ] + + // parse Extras™ chat messages + if ( + parsedMessage.translate === '%s' && + parsedMessage.with?.length === 1 && + parsedMessage.with[0]?.text === '' && + parsedMessage.with[0]?.extra?.length === 5 + ) { + const trueMessageComponent = parsedMessage.with[0].extra + const username = ChatMessage.fromNotch(trueMessageComponent[1]).toMotd() + const message = ChatMessage.fromNotch(trueMessageComponent[4]).toMotd() + bot.emit('chat', username, message) + + return + } + + // parse CommandSpy™ messages + if ( + ( + parsedMessage.color === 'yellow' || + parsedMessage.color === 'aqua' + ) && + parsedMessage.extra?.length === 2 + ) { + const username = parsedMessage.text + const command = parsedMessage.extra[1].text + bot.emit('cspy', username, command) + + return + } + + // parse Minecraft Vanilla™ messages + if ( + vanillaKeys.includes(parsedMessage.translate) && + parsedMessage.with.length >= 2 + ) { + const username = ChatMessage.fromNotch(parsedMessage.with[0]).toMotd() + const message = ChatMessage.fromNotch(parsedMessage.with[1]).toMotd() + bot.emit('chat', username, message) + + return + } + + parsePlayerMessagesLegacy(_message, parsedMessage, bot) +} + +/** + * LEGACY - parse player messages (for prismarine-chat) + * @param {object} message prismarine-chat ChatMessage + * @param {object} _parsedMessage parsed message in a js object + * @param {object} bot bot + */ +function parsePlayerMessagesLegacy (message, _parsedMessage, bot) { + try { + // here is all the player message parsing thing + const raw = message.toMotd() // lags the bot as you already know + // if (raw.match(/.* .*: .*/g)) { + // const username = raw.replace(/.*?\[.*?\] /g, '').replace(/:.*/g, '').replace(/§#....../gm, '') + // const message = raw.split(': ').slice(1).join(' ').replace(/§#....../gm, '') + // bot.emit('chat', username, message) + // } else + if (raw.match(/.* .*\u203a .*/g)) { + const username = raw.replace(/.*?\[.*?\] /g, '').replace(/\u203a.*/g, '').replace(/§#....../gm, '').split(' ')[0] + const message = raw.split('\u203a ').slice(1).join(' ').substring(2) + bot.emit('chat', username, message) + } else if (raw.match(/.* .*\u00BB .*/g)) { + const username = raw.replace(/.*?\[.*?\] /g, '').replace(/\u00BB.*/g, '').replace(/§#....../gm, '').split(' ')[0] + const message = raw.split('\u00BB ').slice(1).join(' ') + bot.emit('chat', username, message) + } + // } else if (raw.match(/.* .*> .*/g)) { + // const username = raw.replace(/.*?\[.*?\] /g, '').replace(/>.*/g, '').replace(/§#....../gm, '').split(' ')[0] + // const message = raw.split('> ').slice(1).join(' ').substring(2) + // bot.emit('chat', username, message) + // } else if (raw.match(/<.*> .*/g)) { + // const username = raw.substring(1).split('>')[0] + // const message = raw.split('> ').slice(1).join(' ') + // + // bot.emit('chat', username, message) + // } else if (raw.match(/§.*§b: §b\/.*/g)) { + // const username = raw.split('§b: §b')[0] + // const command = raw.split('§b: §b')[1] + + // bot.emit('cspy', username, command) + // } else if (raw.match(/§.*§e: §e\/.*/g)) { + // const username = raw.split('§e: §e')[0] + // const command = raw.split('§e: §e')[1] + // bot.emit('cspy', username, command) + // } else if (raw.match(/§.*§b: \/.*/g)) { + // const username = raw.split('§b: ')[0] + // const command = raw.split('§b: ')[1] + + // bot.emit('cspy', username, command) + // } else if (raw.match(/§.*§e: \/.*/g)) { + // const username = raw.split('§e: ')[0] + // const command = raw.split('§e: ')[1] + // bot.emit('cspy', username, command) + // } + } catch (e) {} +}; + +module.exports = { chatPacketListener, parsePlayerMessages } diff --git a/ChomensJS/util/clamp.js b/ChomensJS/util/clamp.js new file mode 100644 index 0000000..809bd3d --- /dev/null +++ b/ChomensJS/util/clamp.js @@ -0,0 +1,6 @@ +function clamp (value, min, max) { + if (value < min) return min + return Math.min(value, max) +} + +module.exports = clamp diff --git a/ChomensJS/util/colors/minecraft.js b/ChomensJS/util/colors/minecraft.js new file mode 100644 index 0000000..57ecfd4 --- /dev/null +++ b/ChomensJS/util/colors/minecraft.js @@ -0,0 +1,23 @@ + +const styles = { + bigint: '\xa76', + boolean: '\xa76', + date: '\xa75', + module: '\xa7n', + name: undefined, + null: '\xa7l', + number: '\xa76', + regexp: '\xa74', + special: '\xa73', + string: '\xa72', + symbol: '\xa72', + undefined: '\xa78' +} + +function stylize (str, styleType) { + const style = styles[styleType] + if (style !== undefined) return `${style}${str}\xa7r` + return str +} + +module.exports = { stylize, styles } diff --git a/ChomensJS/util/containsIllegalCharacters.js b/ChomensJS/util/containsIllegalCharacters.js new file mode 100644 index 0000000..379e595 --- /dev/null +++ b/ChomensJS/util/containsIllegalCharacters.js @@ -0,0 +1,18 @@ +/** + * character allowed in mc chat + * @param {String} character the character + * @return {boolean} allowed + */ +function isAllowedCharacter (character) { + return character !== '\xa7' && character !== '\x7f' +} +/** + * mc chat check if contains illegal chars. + * @param {String} string the string + * @return {boolean} if contains then true else false + */ +function containsIllegalCharacters (string) { + for (let i = 0; i < string.length; i++) if (!isAllowedCharacter(string[i])) return true +} + +module.exports = { containsIllegalCharacters, isAllowedCharacter } diff --git a/ChomensJS/util/escapeMarkdown.js b/ChomensJS/util/escapeMarkdown.js new file mode 100644 index 0000000..5bdc88f --- /dev/null +++ b/ChomensJS/util/escapeMarkdown.js @@ -0,0 +1,22 @@ +/** + * escape markdown so on discord it will be \_ChipMC\_ instead of _ChipMC_ + * @param {String} text + * @param {Boolean} zwsp + * @return {String} + */ +function escapeMarkdown (text, zwsp) { + let unescaped + let escaped + try { + unescaped = text.replace(/\\(\*|@|_|`|~|\\)/g, '$1') + escaped = unescaped.replace(/(\*|@|_|`|~|\\)/g, zwsp + ? '\u200b\u200b$1' + : '\\$1' + ) + } catch (e) { + return unescaped + } + return escaped +} + +module.exports = { escapeMarkdown } diff --git a/ChomensJS/util/file-exists.js b/ChomensJS/util/file-exists.js new file mode 100644 index 0000000..ddf102e --- /dev/null +++ b/ChomensJS/util/file-exists.js @@ -0,0 +1,19 @@ +const fs = require('fs/promises') + +/** + * check if file exists + * @param {String} filepath the file path + * @return {boolean} if file exists true else false + */ +async function fileExists (filepath) { + try { + await fs.access(filepath) + return true + } catch (error) { + if (error.code !== 'ENOENT') throw error + + return false + } +} + +module.exports = fileExists diff --git a/ChomensJS/util/file-list.js b/ChomensJS/util/file-list.js new file mode 100644 index 0000000..6bba885 --- /dev/null +++ b/ChomensJS/util/file-list.js @@ -0,0 +1,18 @@ +const fs = require('fs/promises') + +/** + * just list the files + * @param {String} filepath file path + * @return {Array} component. + */ +async function list (filepath = '.') { + const files = await fs.readdir(filepath) + + const component = [] + for (const filename of files) { + component.push(filename) + } + return component +} + +module.exports = list diff --git a/ChomensJS/util/getFilenameFromUrl.js b/ChomensJS/util/getFilenameFromUrl.js new file mode 100644 index 0000000..0d3ea40 --- /dev/null +++ b/ChomensJS/util/getFilenameFromUrl.js @@ -0,0 +1,14 @@ +const path = require('path') +/** + * get filename from url + * @param {string} urlStr the url + * @return {string} filename + * @example + * getFilenameFromUrl('https://sus.red/amogus.mid?verysus=true') // returns 'amogus.mid' + */ +function getFilenameFromUrl (urlStr) { + const url = new URL(urlStr) + return path.basename(url.pathname) +} + +module.exports = getFilenameFromUrl diff --git a/ChomensJS/util/image.js b/ChomensJS/util/image.js new file mode 100644 index 0000000..4a17c22 --- /dev/null +++ b/ChomensJS/util/image.js @@ -0,0 +1,27 @@ +/** + * resize image. + * @param {number} width width + * @param {number} height height + * @return {object} width and height + */ +function resize (width, height) { + const aspectRatio = width / height + + let optimalWidth = Math.round(aspectRatio * 20 * (27 / 3)) + let optimalHeight = 20 + + if (optimalWidth > 320) { + const reduction = optimalWidth / 320 + + optimalWidth = 320 + + optimalHeight *= reduction + } + + return { + width: Math.floor(optimalWidth), + height: Math.floor(optimalHeight) + } +} + +module.exports = { resize } diff --git a/ChomensJS/util/loadPlugins.js b/ChomensJS/util/loadPlugins.js new file mode 100644 index 0000000..71896f2 --- /dev/null +++ b/ChomensJS/util/loadPlugins.js @@ -0,0 +1,33 @@ +const fs = require('fs/promises') +const util = require('util') +const path = require('path') + +/** + * load plugins + * @param {object} bot the bot object + * @param {object} dcclient discord client + * @param {object} config the config + * @param {object} rl readline + * @param {object} target proxy target + * @param {object} client proxy client + * @param {boolean} proxy is proxy + * @param {array} clientPacketBlacklist the client packet blacklist + * @param {array} targetPacketBlacklist target packet blacklist +*/ +async function loadPlugins (bot, dcclient, config, rl, target, client, proxy, clientPacketBlacklist, targetPacketBlacklist) { + const dir = path.join(__dirname, '..', 'plugins', proxy ? 'proxy' : '') + const plugins = await fs.readdir(dir) + plugins.forEach((plugin) => { + if (!plugin.endsWith('.js')) return + try { + const plug = require(path.join(dir, plugin)) + if (!proxy) plug.inject(bot, dcclient, config, rl) + else plug.inject(bot, client, target, config, clientPacketBlacklist, targetPacketBlacklist) + } catch (e) { + console.log(`Plugin ${plugin} is having exception loading the plugin:`) + console.log(util.inspect(e)) + } + }) +}; + +module.exports = { loadPlugins } diff --git a/ChomensJS/util/load_files.js b/ChomensJS/util/load_files.js new file mode 100644 index 0000000..bbe0dc1 --- /dev/null +++ b/ChomensJS/util/load_files.js @@ -0,0 +1,25 @@ +const fs = require('fs/promises') +const path = require('path') + +/** + * loads js files + * @param {string} directory the directory that contains the js files + * @return {Array} an array of require()ed js files + */ +async function loadPlugins (directory) { + const plugins = [] + + for (const filename of await fs.readdir(directory)) { + if (!filename.endsWith('.js')) continue + + const filepath = path.join(directory, filename) + + const plugin = require(filepath) + + plugins.push(plugin) + } + + return plugins +} + +module.exports = loadPlugins diff --git a/ChomensJS/util/midi_converter/convert_note.js b/ChomensJS/util/midi_converter/convert_note.js new file mode 100644 index 0000000..dce7838 --- /dev/null +++ b/ChomensJS/util/midi_converter/convert_note.js @@ -0,0 +1,39 @@ +const instrumentMap = require('./instrument_map.js') +const percussionMap = require('./percussion_map.js') + +function convertNote (track, note) { + let instrument = null + + const instrumentList = instrumentMap[track.instrument.number] + if (instrumentList != null) { + for (const candidateInstrument of instrumentList) { + if (note.midi >= candidateInstrument.offset && note.midi <= candidateInstrument.offset + 24) { + instrument = candidateInstrument + break + } + } + } + + if (instrument == null) return null + + const pitch = note.midi - instrument.offset + const time = Math.floor(note.time * 1000) + + return { time, instrument: instrument.name, pitch, volume: note.velocity } +} + +function convertPercussionNote (track, note) { + if (note.midi < percussionMap.length) { + const mapEntry = percussionMap[note.midi] + if (mapEntry == null) return + + const { pitch, instrument } = mapEntry + const time = Math.floor(note.time * 1000) + + return { time, instrument: instrument.name, pitch, volume: note.velocity } + } + + return null +} + +module.exports = { convertNote, convertPercussionNote } diff --git a/ChomensJS/util/midi_converter/instrument_map.js b/ChomensJS/util/midi_converter/instrument_map.js new file mode 100644 index 0000000..8fbc770 --- /dev/null +++ b/ChomensJS/util/midi_converter/instrument_map.js @@ -0,0 +1,153 @@ +const instruments = require('./instruments.json') + +module.exports = [ + // Piano (harp bass bell) + [instruments.harp, instruments.bass, instruments.bell], // Acoustic Grand Piano + [instruments.harp, instruments.bass, instruments.bell], // Bright Acoustic Piano + [instruments.bit, instruments.didgeridoo, instruments.bell], // Electric Grand Piano + [instruments.harp, instruments.bass, instruments.bell], // Honky-tonk Piano + [instruments.bit, instruments.didgeridoo, instruments.bell], // Electric Piano 1 + [instruments.bit, instruments.didgeridoo, instruments.bell], // Electric Piano 2 + [instruments.harp, instruments.bass, instruments.bell], // Harpsichord + [instruments.harp, instruments.bass, instruments.bell], // Clavinet + + // Chromatic Percussion (iron_xylophone xylophone bass) + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Celesta + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Glockenspiel + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Music Box + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Vibraphone + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Marimba + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Xylophone + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Tubular Bells + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], // Dulcimer + + // Organ (bit didgeridoo bell) + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Drawbar Organ + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Percussive Organ + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Rock Organ + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Church Organ + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Reed Organ + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Accordian + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Harmonica + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Tango Accordian + + // Guitar (bit didgeridoo bell) + [instruments.guitar, instruments.harp, instruments.bass, instruments.bell], // Acoustic Guitar (nylon) + [instruments.guitar, instruments.harp, instruments.bass, instruments.bell], // Acoustic Guitar (steel) + [instruments.guitar, instruments.harp, instruments.bass, instruments.bell], // Electric Guitar (jazz) + [instruments.guitar, instruments.harp, instruments.bass, instruments.bell], // Electric Guitar (clean) + [instruments.guitar, instruments.harp, instruments.bass, instruments.bell], // Electric Guitar (muted) + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Overdriven Guitar + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Distortion Guitar + [instruments.guitar, instruments.harp, instruments.bass, instruments.bell], // Guitar Harmonics + + // Bass + [instruments.bass, instruments.harp, instruments.bell], // Acoustic Bass + [instruments.bass, instruments.harp, instruments.bell], // Electric Bass (finger) + [instruments.bass, instruments.harp, instruments.bell], // Electric Bass (pick) + [instruments.bass, instruments.harp, instruments.bell], // Fretless Bass + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Slap Bass 1 + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Slap Bass 2 + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Synth Bass 1 + [instruments.didgeridoo, instruments.bit, instruments.xylophone], // Synth Bass 2 + + // Strings + [instruments.flute, instruments.guitar, instruments.bass, instruments.bell], // Violin + [instruments.flute, instruments.guitar, instruments.bass, instruments.bell], // Viola + [instruments.flute, instruments.guitar, instruments.bass, instruments.bell], // Cello + [instruments.flute, instruments.guitar, instruments.bass, instruments.bell], // Contrabass + [instruments.bit, instruments.didgeridoo, instruments.bell], // Tremolo Strings + [instruments.harp, instruments.bass, instruments.bell], // Pizzicato Strings + [instruments.harp, instruments.bass, instruments.chime], // Orchestral Harp + [instruments.harp, instruments.bass, instruments.bell], // Timpani + + // Ensenble + [instruments.harp, instruments.bass, instruments.bell], // String Ensemble 1 + [instruments.harp, instruments.bass, instruments.bell], // String Ensemble 2 + [instruments.harp, instruments.bass, instruments.bell], // Synth Strings 1 + [instruments.harp, instruments.bass, instruments.bell], // Synth Strings 2 + [instruments.harp, instruments.bass, instruments.bell], // Choir Aahs + [instruments.harp, instruments.bass, instruments.bell], // Voice Oohs + [instruments.harp, instruments.bass, instruments.bell], // Synth Choir + [instruments.harp, instruments.bass, instruments.bell], // Orchestra Hit + + // Brass + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.bit, instruments.didgeridoo, instruments.bell], + + // Reed + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + + // Pipe + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + [instruments.flute, instruments.didgeridoo, instruments.iron_xylophone, instruments.bell], + + // Synth Lead + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + + // Synth Pad + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + + // Synth Effects + null, + null, + [instruments.bit, instruments.didgeridoo, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + [instruments.harp, instruments.bass, instruments.bell], + + // Ethnic + [instruments.banjo, instruments.bass, instruments.bell], + [instruments.banjo, instruments.bass, instruments.bell], + [instruments.banjo, instruments.bass, instruments.bell], + [instruments.banjo, instruments.bass, instruments.bell], + [instruments.banjo, instruments.bass, instruments.bell], + [instruments.harp, instruments.didgeridoo, instruments.bell], + [instruments.harp, instruments.didgeridoo, instruments.bell], + [instruments.harp, instruments.didgeridoo, instruments.bell], + + // Percussive + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], + [instruments.iron_xylophone, instruments.bass, instruments.xylophone], + [instruments.iron_xylophone, instruments.bass, instruments.xylophone] +] diff --git a/ChomensJS/util/midi_converter/instruments.json b/ChomensJS/util/midi_converter/instruments.json new file mode 100644 index 0000000..3171a9a --- /dev/null +++ b/ChomensJS/util/midi_converter/instruments.json @@ -0,0 +1,82 @@ +{ + "harp": { + "id": 0, + "name": "harp", + "offset": 54 + }, + "basedrum": { + "id": 1, + "name": "basedrum", + "offset": 0 + }, + "snare": { + "id": 2, + "name": "snare", + "offset": 0 + }, + "hat": { + "id": 3, + "name": "hat", + "offset": 0 + }, + "bass": { + "id": 4, + "name": "bass", + "offset": 30 + }, + "flute": { + "id": 5, + "name": "flute", + "offset": 66 + }, + "bell": { + "id": 6, + "name": "bell", + "offset": 78 + }, + "guitar": { + "id": 7, + "name": "guitar", + "offset": 42 + }, + "chime": { + "id": 8, + "name": "chime", + "offset": 78 + }, + "xylophone": { + "id": 9, + "name": "xylophone", + "offset": 78 + }, + "iron_xylophone": { + "id": 10, + "name": "iron_xylophone", + "offset": 54 + }, + "cow_bell": { + "id": 11, + "name": "cow_bell", + "offset": 66 + }, + "didgeridoo": { + "id": 12, + "name": "didgeridoo", + "offset": 30 + }, + "bit": { + "id": 13, + "name": "bit", + "offset": 54 + }, + "banjo": { + "id": 14, + "name": "banjo", + "offset": 54 + }, + "pling": { + "id": 15, + "name": "pling", + "offset": 54 + } +} \ No newline at end of file diff --git a/ChomensJS/util/midi_converter/main.js b/ChomensJS/util/midi_converter/main.js new file mode 100644 index 0000000..fe0000a --- /dev/null +++ b/ChomensJS/util/midi_converter/main.js @@ -0,0 +1,37 @@ + +const { Midi } = require('@tonejs/midi') +const { convertNote, convertPercussionNote } = require('./convert_note.js') + +function convertMidi (midi) { + if (!(midi instanceof Midi)) throw new TypeError('midi must be an instance of require(\'@tonejs/midi\').Midi') + + let noteList = [] + for (const track of midi.tracks) { + for (const note of track.notes) { + const mcNote = (track.instrument.percussion ? convertPercussionNote : convertNote)(track, note) + if (mcNote != null) { + noteList.push(mcNote) + } + } + } + + noteList = noteList.sort((a, b) => a.time - b.time) + + // It might be better to move some of this code to the converting loop (for performance reasons) + let maxVolume = 0.001 + for (const note of noteList) { + if (note.volume > maxVolume) maxVolume = note.volume + } + for (const note of noteList) { + note.volume /= maxVolume + } + + let songLength = 0 + for (const note of noteList) { + if (note.time > songLength) songLength = note.time + } + + return { name: midi.header.name, notes: noteList, loop: false, loopPosition: 0, length: songLength } +} + +module.exports = { convertMidi, convertNote, convertPercussionNote } diff --git a/ChomensJS/util/midi_converter/package.json b/ChomensJS/util/midi_converter/package.json new file mode 100644 index 0000000..a603764 --- /dev/null +++ b/ChomensJS/util/midi_converter/package.json @@ -0,0 +1,3 @@ +{ + "main": "main.js" +} \ No newline at end of file diff --git a/ChomensJS/util/midi_converter/percussion_map.js b/ChomensJS/util/midi_converter/percussion_map.js new file mode 100644 index 0000000..5cdd796 --- /dev/null +++ b/ChomensJS/util/midi_converter/percussion_map.js @@ -0,0 +1,58 @@ +const instruments = require('./instruments.json') + +module.exports = [ + ...new Array(35).fill(null), // offset + { pitch: 10, instrument: instruments.basedrum }, + { pitch: 6, instrument: instruments.basedrum }, + { pitch: 6, instrument: instruments.hat }, + { pitch: 8, instrument: instruments.snare }, + { pitch: 6, instrument: instruments.hat }, + { pitch: 4, instrument: instruments.snare }, + { pitch: 6, instrument: instruments.basedrum }, + { pitch: 22, instrument: instruments.snare }, + { pitch: 13, instrument: instruments.basedrum }, + { pitch: 22, instrument: instruments.snare }, + { pitch: 15, instrument: instruments.basedrum }, + { pitch: 18, instrument: instruments.snare }, + { pitch: 20, instrument: instruments.basedrum }, + { pitch: 23, instrument: instruments.basedrum }, + { pitch: 17, instrument: instruments.snare }, + { pitch: 23, instrument: instruments.basedrum }, + { pitch: 24, instrument: instruments.snare }, + { pitch: 8, instrument: instruments.snare }, + { pitch: 13, instrument: instruments.snare }, + { pitch: 18, instrument: instruments.hat }, + { pitch: 18, instrument: instruments.snare }, + { pitch: 1, instrument: instruments.hat }, + { pitch: 13, instrument: instruments.snare }, + { pitch: 2, instrument: instruments.hat }, + { pitch: 13, instrument: instruments.snare }, + { pitch: 9, instrument: instruments.hat }, + { pitch: 2, instrument: instruments.hat }, + { pitch: 8, instrument: instruments.hat }, + { pitch: 22, instrument: instruments.basedrum }, + { pitch: 15, instrument: instruments.basedrum }, + { pitch: 13, instrument: instruments.snare }, + { pitch: 8, instrument: instruments.snare }, + { pitch: 8, instrument: instruments.hat }, + { pitch: 3, instrument: instruments.hat }, + { pitch: 20, instrument: instruments.hat }, + { pitch: 23, instrument: instruments.hat }, + { pitch: 24, instrument: instruments.hat }, + { pitch: 24, instrument: instruments.hat }, + { pitch: 17, instrument: instruments.hat }, + { pitch: 11, instrument: instruments.hat }, + { pitch: 18, instrument: instruments.hat }, + { pitch: 9, instrument: instruments.hat }, + { pitch: 5, instrument: instruments.hat }, + { pitch: 22, instrument: instruments.hat }, + { pitch: 19, instrument: instruments.snare }, + { pitch: 17, instrument: instruments.hat }, + { pitch: 22, instrument: instruments.hat }, + { pitch: 22, instrument: instruments.snare }, + { pitch: 24, instrument: instruments.chime }, + { pitch: 24, instrument: instruments.chime }, + { pitch: 21, instrument: instruments.hat }, + { pitch: 14, instrument: instruments.basedrum }, + { pitch: 7, instrument: instruments.basedrum } +] diff --git a/ChomensJS/util/minecraftVersionToNumber.js b/ChomensJS/util/minecraftVersionToNumber.js new file mode 100644 index 0000000..50184be --- /dev/null +++ b/ChomensJS/util/minecraftVersionToNumber.js @@ -0,0 +1,13 @@ +/** + * converts minecraft version to number (for example '1.19.2' will be 1.19) + * @param {String} version + * @return {Number} decimal number of the version you specified + */ +function minecraftVersionToNumber (version) { + const versionArray = version.split('.') + if (versionArray.length === 2) return Number(version) + versionArray.pop() + return Number(versionArray.join('.')) +} + +module.exports = minecraftVersionToNumber diff --git a/ChomensJS/util/nbs_converter.js b/ChomensJS/util/nbs_converter.js new file mode 100644 index 0000000..ed174b6 --- /dev/null +++ b/ChomensJS/util/nbs_converter.js @@ -0,0 +1,65 @@ +const nbs = require('./nbs_file') +const instrumentNames = [ + 'harp', + 'bass', + 'basedrum', + 'snare', + 'hat', + 'guitar', + 'flute', + 'bell', + 'chime', + 'xylophone', + 'iron_xylophone', + 'cow_bell', + 'didgeridoo', + 'bit', + 'banjo', + 'pling' +] + +function convertNBS (buf) { + const parsed = nbs.parse(buf) + const song = { + name: parsed.songName, + notes: [], + loop: false, + loopPosition: 0, + length: 0 + } + if (parsed.loop > 0) { + song.loop = true + song.loopPosition = parsed.loopStartTick + } + for (const note of parsed.nbsNotes) { + let instrument = note.instrument + if (note.instrument < instrumentNames.length) { + instrument = instrumentNames[note.instrument] + } else continue + + let key = note.key + + while (key < 33) key += 12; + while (key > 57) key -= 12; + + const layerVolume = 100 + // will add layer volume later + + const time = tickToMs(note.tick, parsed.tempo) + song.length = Math.max(song.length, time) + + song.notes.push({ + instrument, + pitch: key - 33, + volume: note.velocity * layerVolume / 10000, + time + }) + } + return song +} + +function tickToMs (tick = 1, tempo) { + return Math.floor(1000 * tick * 100 / tempo) +} + +module.exports = convertNBS diff --git a/ChomensJS/util/nbs_file.js b/ChomensJS/util/nbs_file.js new file mode 100644 index 0000000..0cb6336 --- /dev/null +++ b/ChomensJS/util/nbs_file.js @@ -0,0 +1,157 @@ +function parse (buffer) { + let i = 0 + + let songLength = 0 + let format = 0 + let vanillaInstrumentCount = 0 + songLength = readShort() + if (songLength === 0) { + format = readByte() + } + + if (format >= 1) { + vanillaInstrumentCount = readByte() + } + if (format >= 3) { + songLength = readShort() + } + + const layerCount = readShort() + const songName = readString() + const songAuthor = readString() + const songOriginalAuthor = readString() + const songDescription = readString() + const tempo = readShort() + const autoSaving = readByte() + const autoSavingDuration = readByte() + const timeSignature = readByte() + const minutesSpent = readInt() + const leftClicks = readInt() + const rightClicks = readInt() + const blocksAdded = readInt() + const blocksRemoved = readInt() + const origFileName = readString() + + let loop = 0 + let maxLoopCount = 0 + let loopStartTick = 0 + if (format >= 4) { + loop = readByte() + maxLoopCount = readByte() + loopStartTick = readShort() + } + + const nbsNotes = [] + let tick = -1 + while (true) { + const tickJumps = readShort() + if (tickJumps === 0) break + tick += tickJumps + + let layer = -1 + while (true) { + const layerJumps = readShort() + if (layerJumps === 0) break + layer += layerJumps + const note = nbsNote() + note.tick = tick + note.layer = layer + note.instrument = readByte() + note.key = readByte() + if (format >= 4) { + note.velocity = readByte() + note.panning = readByte() + note.pitch = readShort() + } + nbsNotes.push(note) + } + } + + const nbsLayers = [] + if (i <= buffer.length) { + for (let j = 0; j < layerCount; j++) { + const layer = nbsLayer() + layer.name = readString() + if (format >= 4) { + layer.lock = readByte() + } + layer.volume = readByte() + if (format >= 2) { + layer.stereo = readByte() + } + nbsLayers.push(layer) + } + } + + return { + songLength, + format, + vanillaInstrumentCount, + layerCount, + songName, + songAuthor, + songOriginalAuthor, + songDescription, + tempo, + autoSaving, + autoSavingDuration, + timeSignature, + minutesSpent, + leftClicks, + rightClicks, + blocksAdded, + blocksRemoved, + origFileName, + loop, + maxLoopCount, + loopStartTick, + nbsNotes, + nbsLayers + } + + function readByte () { + return buffer.readInt8(i++) + } + + function readShort () { + const short = buffer.readInt16LE(i) + i += 2 + return short + } + + function readInt () { + const int = buffer.readInt32LE(i) + i += 4 + return int + } + + function readString () { + let length = readInt() + let string = '' + for (; length > 0; length--) string += String.fromCharCode(readByte()) + return string + } +} + +function nbsNote () { + return { + tick: null, + layer: null, + instrument: null, + key: null, + velocity: 100, + panning: 100, + pitch: 0 + } +} + +function nbsLayer () { + return { + name: null, + lock: 0, + volume: null, + stereo: 100 + } +} + +module.exports = { parse, nbsNote, nbsLayer } diff --git a/ChomensJS/util/txt_song_parser.js b/ChomensJS/util/txt_song_parser.js new file mode 100644 index 0000000..6459c15 --- /dev/null +++ b/ChomensJS/util/txt_song_parser.js @@ -0,0 +1,15 @@ +const { instrumentsArray } = require('minecraft-data')('1.15.2') // chip hardcoding moment + +function parseTXTSong (data) { + let length = 0 + const notes = String(data).split(/\r\n|\r|\n/).map(line => { + const [tick, pitch, instrument] = line.split(':').map(Number) + if (tick === undefined || pitch === undefined || instrument === undefined) return undefined + const time = tick * 50 + length = Math.max(length, time) + return { time, pitch, instrument: instrumentsArray[instrument].name, volume: 1 } + }).filter(note => note !== undefined) + return { name: '', notes, loop: false, loopPosition: 0, length } +} + +module.exports = parseTXTSong diff --git a/CommandModules/command_error.js b/CommandModules/command_error.js new file mode 100644 index 0000000..a71fe8f --- /dev/null +++ b/CommandModules/command_error.js @@ -0,0 +1,17 @@ +// TODO: Improve how messages are stringified +const ChatMessage = require('prismarine-chat')('1.20.2') +const stringify = message => new ChatMessage(message).toString() + +class CommandError extends Error { + constructor (message, filename, lineError) { + super(stringify(message), filename, lineError) + this.name = 'CommandError' + this._message = message + + } + + get message () { + return stringify(this._message) + } +} +module.exports = CommandError diff --git a/CommandModules/command_source.js b/CommandModules/command_source.js new file mode 100644 index 0000000..097fb73 --- /dev/null +++ b/CommandModules/command_source.js @@ -0,0 +1,17 @@ +class CommandSource { + constructor (player, sources, hash, owner = false, discordMessageEvent = null) { + this.player = player + this.sources = sources + this.hash = hash + this.owner = owner + this.discordMessageEvent = discordMessageEvent + } + + sendFeedback () {} + + sendError (message) { + this.sendFeedback([{ text: '', color: 'dark_red' }, message], false) + } +} + +module.exports = CommandSource diff --git a/README.md b/README.md new file mode 100644 index 0000000..770e9a3 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# FNFBoyfriendBot-V4.0 diff --git a/bot.js b/bot.js new file mode 100644 index 0000000..19d0fe9 --- /dev/null +++ b/bot.js @@ -0,0 +1,72 @@ +const mc = require('minecraft-protocol') +const { EventEmitter } = require('events') +const fs = require('fs') +const path = require('path') +const forge = require('minecraft-protocol-forge') +// "buildstring":"FNFBoyfriendBotX V4.0.8a Build:97", + //"FoundationBuildString":"Ultimate Foundation V1.0.1 Build:31", +function createBot(options = {}) { + const bot = new EventEmitter() +const rs = require('randomstring') + // Set some default values in options + let r = Math.floor(Math.random() * 255) + 1; + options.host ??= 'localhost' + options.username ??= username() + options.hideErrors ??= false // HACK: Hide errors by default as a lazy fix to console being spammed with them +options.forge ??= true + bot.options = options + + // Create our client object, put it on the bot, and register some events + bot.on('init_client', client => { + client.on('packet', (data, meta) => { + bot.emit('packet', data, meta) + bot.emit('packet.' + meta.name, data) + }) + + client.on('login', () => { + bot.uuid = client.uuid + bot.username = client.username + }) + + client.on('end', reason => bot.emit('end', reason)) + + client.on('error', error => bot.emit('error', error)) + + }) + +const buildstring = process.env['buildstring'] + + const client = options.client ?? mc.createClient(options) + bot._client = client + bot.emit('init_client', client) + + bot.bots = options.bots ?? [bot] + + // Modules + bot.loadModule = module => module(bot, options) + + for (const filename of fs.readdirSync(path.join(__dirname, 'modules'))) { + try { + const module = require(path.join(__dirname, 'modules', filename)) + bot.loadModule(module) + } catch (error) { + console.error('Failed to load module', filename, ':', error) + } + } + + return bot +} + +// ABot username function mabe mabe +function username() { + const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; // remove sus characters like ` or like ( or whatever because it breaks whatever + let username = ''; + for (let i = 0; i < 8; i++) { + const randomIndex = Math.floor(Math.random() * characters.length); + username += characters[randomIndex]; + } + return username; +} + + +module.exports = createBot diff --git a/chat/chipmunkmod.js b/chat/chipmunkmod.js new file mode 100644 index 0000000..9c6db69 --- /dev/null +++ b/chat/chipmunkmod.js @@ -0,0 +1,28 @@ +function parseMessage (message, data) { + if (message === null || typeof message !== 'object') return + + if (message.with?.length < 3 || (message.translate !== '[%s] %s › %s' && message.translate !== '%s %s › %s')) return + + const senderComponent = message.with[1] + // wtf spam again - console.log(senderComponent)//wtf... + const contents = message.with[2] +// spam lol - console.log(contents) + let sender + + const hoverEvent = senderComponent.hoverEvent + if (hoverEvent?.action === 'show_entity') { + const id = hoverEvent.contents.id +// + sender = data.players.find(player => player.uuid === id) + } else { + const stringUsername = data.getMessageAsPrismarine(senderComponent).toString() // TypeError: data.getMessageAsPrismarine is not a function + + sender = data.players.find(player => player.profile.name) //=== stringusername) + } + + if (!sender) return undefined + + return { sender, contents, type: 'minecraft:chat', senderComponent } +} + +module.exports = parseMessage diff --git a/chat/chipmunkmodBlackilyKatVer.js b/chat/chipmunkmodBlackilyKatVer.js new file mode 100644 index 0000000..96d64a7 --- /dev/null +++ b/chat/chipmunkmodBlackilyKatVer.js @@ -0,0 +1,27 @@ +function parseMessage (message, data) { + if (message === null || typeof message !== 'object') return + + if (message.with?.length < 4 || (message.translate !== '[%s%s] %s › %s', message.color !== '#55FFFF' && message.translate !== '%s%s %s › %s', message.color !== '#55FFFF')) return + + const senderComponent = message.with[1] + const contents = message.with[3] + + let sender + + const hoverEvent = senderComponent.hoverEvent + if (hoverEvent?.action === 'show_entity') { + const id = hoverEvent.contents.id +// + sender = data.players.find(player => player.uuid === id) + } else { + const stringUsername = data.getMessageAsPrismarine(senderComponent).toString() // TypeError: data.getMessageAsPrismarine is not a function + + sender = data.players.find(player => player.profile.name) //=== stringusername) + } + + if (!sender) return undefined + + return { sender, contents, type: 'minecraft:chat', senderComponent } +} + +module.exports = parseMessage diff --git a/chat/kaboom.js b/chat/kaboom.js new file mode 100644 index 0000000..880b5bf --- /dev/null +++ b/chat/kaboom.js @@ -0,0 +1,41 @@ +const util = require('util') + +function parseMessage (message, data) { + if (message === null || typeof message !== 'object') return + + if (message.text !== '' || !Array.isArray(message.extra) || message.extra.length < 3) return + + const children = message.extra + + const prefix = children[0] + let displayName = data.senderName ?? { text: '' } + let contents = { text: '' } + + if (isSeparatorAt(children, 1)) { // Missing/blank display name + if (children.length > 3) contents = children[3] + } else if (isSeparatorAt(children, 2)) { + displayName = children[1] + if (children.length > 4) contents = children[4] + } else { + return undefined + } + + const playerListDisplayName = { extra: [prefix, displayName], text: '' } + let sender + if (data.uuid) { + sender = data.players.find(player => player.uuid === data.senderUuid) + } else { + const playerListDisplayName = { extra: [prefix, displayName], text: '' } + sender = data.players.find(player => util.isDeepStrictEqual(player.displayName, playerListDisplayName)) + } + + if (!sender) return undefined + + return { sender, contents, type: 'minecraft:chat', displayName } +} + +function isSeparatorAt (children, start) { + return (children[start]?.text === ':' || children[start]?.text === '\xa7f:') && children[start + 1]?.text === ' ' +} + +module.exports = parseMessage diff --git a/commands/botdevhistory.js b/commands/botdevhistory.js new file mode 100644 index 0000000..20247bd --- /dev/null +++ b/commands/botdevhistory.js @@ -0,0 +1,13 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'botdevhistory', + description:['bots dev history'], + execute (context) { + + const message = context.arguments.join(' ') + const bot = context.bot +var prefix = '&8&l&m[&4&mParker2991&8]&8&m[&b&mBOYFRIEND&8]&8&m[&b&mCONSOLE&8]&r ' + bot.core.run('bcraw ' + prefix + 'Thank you for all that helped and contributed with the bot, it has been one hell of a ride with the bot hasnt it? From November 22, 2022 to now, 0.1 beta to 4.0 alpha, Mineflayer to Node-Minecraft-Protocol. I have enjoyed all the new people i have met throughout the development of the bot back to the days when the bot used mineflayer for most of its lifespan to the present as it now uses node-minecraft-protocol. Its about time for me to tell how development went in the bot well here it is, back in 0.1 beta of the bot it was skidded off of menbot 1.0 reason why? Well because LoginTimedout gave me the bot when ayunboom was still a thing and he helped throughout that time period bot and when 1.0 beta came around he he just stopped helping me on it why? because he had servers to run so yeah but anyway back then i didnt know what skidded like i do now so i thought i could get away with but i was wrong 💀. Early names considered for the bot were &6&lParkerBot &4&lDEMONBot &b&lWoomyBot &b&lBoyfriendBot,&r i kept the name &b&lBoyfriendBot&r throughout most of the early development but i got sick and tired of being harassed about the name being told it was gay but people really didnt know what it meant did they? It was referenced to Boyfriend from Friday Night Funkin’ so right around 1.0 released i renamed it to &b&lFNFBoyfriend&4&lBot &rand around 2.0 changed it to &5&lFNF&b&lBoyfriend&4&lBot &rand luckily avoided the harassment when i changed it i love coding and i want to learn how to code more thank you all!') + } +} diff --git a/commands/bots.js b/commands/bots.js new file mode 100644 index 0000000..5beb582 --- /dev/null +++ b/commands/bots.js @@ -0,0 +1,205 @@ + // TODO: Maybe add more authors +const bots = [ + { + name: { text: 'HBot', color: 'aqua', bold:false }, + authors: ['hhhzzzsss'], + exclaimer:'HBOT HARRYBUTT LMAOOOOOOOOOOOOOOOOO', + foundation: 'java/mcprotocollib', + prefixes: ['#'] + }, + { + name: { text: '64Bot', color: 'gold', bold:false }, + authors: ['64Will64'], + exclaimer:'NINTENDO 64?!?!??!?! 69Bot when??????', + foundation: 'NodeJS/Mineflayer', + prefixes: ['w='] + }, + { + name: [{ text: 'Evil', color: 'dark_red', bold:false }, {text:'Bot', color:'dark_purple'}], + authors: ['FusseligerDev'], + exclaimer:'', + foundation: 'Java/Custom', + prefixes: ['!'] + }, + { + name: { text: 'SBot Java', color: 'white', bold:false }, // TODO: Gradient + authors: ['evkc'], + foundation: 'Java/MCProtocolLib', + prefixes: [':'] + }, + { + name: { text: 'SBot Rust', color: 'white', bold:false}, // TODO: Gradient + authors: ['evkc'], + foundation: 'Rust', + prefixes: ['re:'] + }, + { + name: { text: 'Z-Boy-Bot', color: 'dark_purple', bold:false }, // TODO: Gradient + exclaimer: 'Most likely skidded along with kbot that the dev used', + authors: ['Romnci'], + foundation: 'NodeJS/mineflayer or Java/mcprotocollib idfk', + prefixes: ['Z]'] + }, + { + name: { text: 'ABot', color: 'gold', bold:true }, // TODO: Gradient + exclaimer: 'not used anymore (replaced by V2)', + authors: [{text: '_yfd', color: 'light_purple'}], + foundation: 'NodeJS/Node-Minecraft-Protocol', + prefixes: ['<'] + }, + { + name: { text: 'ABot-V2', color: 'gold', bold:true }, // TODO: Gradient + exclaimer: '', + authors: [{text: '_yfd', color: 'light_purple'}], + foundation: 'NodeJS/Node-Minecraft-Protocol', + prefixes: ['<'] + }, + { + name: { text: 'FardBot', color: 'light_purple', bold:false }, + authors: ['_yfd'], + exclaimer: 'bot is dead lol', + foundation: 'NodeJS/Mineflayer', + prefixes: ['<'] + }, + + { + name: { text: 'ChipmunkBot', color: 'green', bold:false }, + authors: ['_ChipMC_'], + exclaimer: 'chips? also shoutout to chip and chayapak for helping in the rewrite', + + foundation: 'Java/MCProtocolLib', + prefixes: ["'", "/'"] + }, + { + name: { text: 'ChipmunkBot Old', color: 'green', bold:false }, + authors: ['_ChipMC_'], + foundation: 'NodeJS/Node-Minecraft-Protocol', + + }, + { + name: { text: 'TestBot', color: 'aqua', bold:false }, + authors: ['Blackilykat'], + foundation: 'Java/MCProtocolLib', + prefixes: ["-"] + }, + { + name: { text: 'UBot', color: 'grey', bold:false }, + authors: ['HexWoman'], + exclaimer: 'UwU OwO', + + foundation: 'NodeJS/node-minecraft-protocol', + prefixes: ['"'] + }, + { + name: { text: 'ChomeNS Bot Java', color: 'yellow', bold:false}, + authors: ['chayapak'], + exclaimer: 'wow its my bot !! ! 4374621q43567%^&#%67868-- chayapak', + foundation: 'Java/MCProtocolLib', + prefixes: ['*', 'cbot ', '/cbot '] + }, + { + name: { text: 'ChomeNS Bot NodeJS', color: 'yellow', bold:false}, + authors: ['chayapak'], + + foundation: 'NodeJS/Node-Minecraft-Protocol', + prefixes: ['*', 'cbot', '/cbot'] + }, + { + name: { text: 'RecycleBot', color: 'dark_green', bold:false}, + foundation: ['MorganAnkan'], + exclaimer: 'nice bot', + language: 'NodeJS/node-minecraft-protocol', + prefixes: ['='] + }, + { + name: { text: 'ManBot', color: 'dark_green' , bold:false }, + exclaimer: '(more like men bot :skull:) OH HAAAAAAAAAAAAAAIIILL LOGINTIMEDOUT', + authors: ['Man/LogintimedOut'], + foundation: 'NodeJS/mineflayer', + prefixes: ['(Note:I dont remember!!)'] + }, + { + name: [{ text: 'Useless', color: 'red', bold:false}, { text: 'Bot', color: 'gray', bold:false}], + exclaimer: 'it isnt useless its a good bot................', + authors: ['IuCC'], + foundation: 'NodeJS/node-minecraft-protocol', + prefixes: ['['] + }, + { + name: [{ text: 'Blurry', color: 'dark_purple' , bold:false}, { text: 'Bot', color: 'red' }], + exclaimer: '', + authors: ['SirLennox'], + foundation: 'Java/custom', + prefixes: [','] + }, + { + name: [{ text: 'KittyCorp', color: 'yellow', bold:false }, { text: 'Bot', color: 'yellow' }], + exclaimer: '3 words ginlang is gay', + authors: ['ginlang , G6_, ArrayBuffer, and i guess more??'], + foundation: 'NodeJS/node-minecraft-protocol', + prefixes: ['^'] + }, + + { + name: [{ text:'FNF', color: 'dark_purple', bold: false}, {text:'Boyfriend', color: 'aqua', bold:false}, {text:'Bot', color:'dark_red', bold:false}, {text:' Node-Minecraft-Protocol', color:'black', bold:false}], + authors: [{ text:'Parker2991', color: 'dark_red'}, {text:' _ChipMC_', color: 'dark_green', bold:false}, {text:' chayapak', color:'yellow', bold:false}], + exclaimer: 'FNFBoyfriendBot NMP Rewrite', + foundation: 'NodeJS/node-minecraft-protocol', + prefixes: ['~'] + }, + { + name: [{ text:'FNF', color: 'dark_purple', bold: false}, {text:'Boyfriend', color: 'aqua', bold:false}, {text:'Bot', color:'dark_red', bold:false}, {text:' Mineflayer', color:'green', bold:false}], + authors: [{text:'Parker2991', color:'dark_red' }, {text:' _ChipMC_', color:'dark_green', bold:false }], + exclaimer:'1037 LINES OF CODE WTFARD!??! also this version is in console commands only' , + foundation: 'NodeJS/mineflayer', + prefixes: [] + } +] + +module.exports = { + name: 'bots', + description:['shows a list of known bots'], + execute (context) { + const query = context.arguments.join(' ').toLowerCase() + + if (query.length === 0) { + const list = [] + + for (const info of bots) { + if (list.length !== 0) list.push({ text: ', ', color: 'gray' }) + list.push(info.name) + } + + context.source.sendFeedback(['Known bots (', bots.length, ') - ', ...list], false) + return + } + + for (const info of bots) { + const plainName = String(context.bot.getMessageAsPrismarine(info.name)).toLowerCase() + if (plainName.includes(query)) this.sendBotInfo(info, context.bot) + } + }, + + sendBotInfo (info, bot) { + const component = [''] + component.push('Name: ', info.name) + if (info.exclaimer) component.push('\n', 'Exclaimer: ', info.exclaimer) + if (info.authors && info.authors.length !== 0) { + component.push('\n', 'Authors: ') + for (const author of info.authors) { + component.push(author, { text: ', ', color: 'gray' }) + } + component.pop() + } + if (info.foundation) component.push('\n', 'Foundation: ', info.foundation) + if (info.prefixes && info.prefixes.length !== 0) { + component.push('\n', 'Prefixes: ') + for (const prefix of info.prefixes) { + component.push(prefix, { text: ', ', color: 'gray' }) + } + component.pop() + } + bot.tellraw([component]) + } +}//it doing it just for the ones i added lol +// prob a replit moment, it probably thinks there are regexes in the strings diff --git a/commands/cai.js b/commands/cai.js new file mode 100644 index 0000000..b1e374c --- /dev/null +++ b/commands/cai.js @@ -0,0 +1,67 @@ +const CommandError = require('../CommandModules/command_error') + + +module.exports = { + + name: 'cai', + description:['a broken asf command thats supposed to connect to beta.character.ai'], + execute (context) { + //throw new CommandError('locked cuz of Error: Failed to fetch a lazy token') + const bot = context.bot + const source = context.source + const args = context.arguments; + const CharacterAI = require("node_characterai"); + const characterAI = new CharacterAI(); + + (async () => { + // Authenticating as a guest (use `.authenticateWithToken()` to use an account) + await characterAI.authenticateAsGuest(); + + // Place your character's id here + const characterId = "-LojS2FMmI6dLLG4cPzCm1xIIpgwVktHwjHRIImfXSE"; + + const chat = await characterAI.createOrContinueChat(characterId); + const response = await chat.sendAndAwaitResponse(message, true); + try { + source.sendFeedback(response) + + } catch (e) { + source.sendFeedback({ text: e.stack, color: 'red' }) + } + + })(); + } +} + +/* try { + const page = await wiki.page(args.join(' ')) + const summary = await page.summary() + //const definitions = await urban.define(args.join(' ')) + + + source.sendFeedback({ text: summary.extract, color: 'green' }) + + } catch (e) { + source.sendFeedback({ text: e.stack, color: 'red' }) + */ +//https://beta.character.ai/chat?char=-LojS2FMmI6dLLG4cPzCm1xIIpgwVktHwjHRIImfXSE + +/*const CharacterAI = require("node_characterai"); +const characterAI = new CharacterAI(); + +(async () => { + // Authenticating as a guest (use `.authenticateWithToken()` to use an account) + await characterAI.authenticateAsGuest(); + + // Place your character's id here + const characterId = "8_1NyR8w1dOXmI1uWaieQcd147hecbdIK7CeEAIrdJw"; + + const chat = await characterAI.createOrContinueChat(characterId); + + // Send a message + const response = await chat.sendAndAwaitResponse("Hello discord mod!", true); + + console.log(response); + // Use `response.text` to use it as a string +})(); +*/ \ No newline at end of file diff --git a/commands/calculator.js b/commands/calculator.js new file mode 100644 index 0000000..6369e91 --- /dev/null +++ b/commands/calculator.js @@ -0,0 +1,72 @@ +const CommandError = require('../CommandModules/command_error') +module.exports = { + name: 'calculator', + description:['calculate maths'], + execute (context) { + const bot = context.bot + const args = context.arguments + const cmd = {//test.js + translate: '[%s] ', + bold: false, + color: 'white', + with: [ + { color: 'blue', text: 'Calculator Cmd'}, + ] + } +const operation = args[0] + const operator1 = parseFloat(args[1]) + const operator2 = parseFloat(args[2]) + + // + switch (operation) { + case 'add': + context.source.sendFeedback({ + translate: '[%s] %s is %s', + with: [ + {color: 'blue', text:'Calculator Cmd'}, + `${operator1} + ${operator2}`, + operator1 + operator2 + ] + }); + + break + case 'subtract': + context.source.sendFeedback({ + translate: `[%s] %s is %s`, + with: [ + { color: 'blue', text: 'Calculator Cmd'}, + `${operator1} - ${operator2}`, + operator1 - operator2 + ] + }); + + break + case 'multiply': + context.source.sendFeedback({ + translate: '[%s] %s is %s', + with: [ + { color: 'blue', text: 'Calculator Cmd'}, + `${operator1} x ${operator2}`, + operator1 * operator2 + ] + }); + + break + case 'divide': + context.source.sendFeedback({ + translate: '[%s] %s is %s', + with: [ + { color: 'blue', text: 'Calculator Cmd'}, + `${operator1} / ${operator2}`, + operator1 / operator2 + ] + + }); + + break + default: + context.source.sendError([cmd, { text: 'Invalid action', color: 'dark_red' }]) + } + } +} + diff --git a/commands/changelog.js b/commands/changelog.js new file mode 100644 index 0000000..d4318b5 --- /dev/null +++ b/commands/changelog.js @@ -0,0 +1,358 @@ + +const bots = [ + { + name: { text: 'v0.1.0 - v0.5.0-beta', color: 'blue', bold:false }, + authors: ['Prototypes'], + + foundation: '11/22/22 - 1/24/23', + exclaimer:'ehh nothing much just the release of the betas', + }, + { + name: { text: 'v1.0.0-beta', color: 'blue', bold:false }, + authors: ['in console test'], + + foundation: '1/25/23', + exclaimer:'original commands:!cloop bcraw,!cloop sudo,!troll,!say,!op (broke),!deop (broke), !gms (broke),!freeze,!icu <--- these commands no longer can be used in game but in console for beta 1.0 commands added: fake kick,ban,kick,crashserver,stop,gmc,greetin,test(broken idk),bypass,entity spam ,gms ,stop,tntspam ,prefix ,annoy (broke results in a complete server crash keeping ayunboom down for 3 to 5 hours),freeze,crashserver,troll ,trol(more destructive),icu ,say,sudo,cloop', + }, + { + name: { text: 'v1.0.0', color: 'dark_red', bold:false }, + authors: ['FNFBoyfriendBot'], + + foundation: '1/26/23', + exclaimer:'FNFBoyfriendBot. commands added: BOOM,deop,troll and trol(added extra code to both commands),kaboom,serverdeop, commands fixed:tp,gms,annoy(attemps to crash the server but not as bad as it was) commands untested:prefix command Broke:icu,freeze,tntspam,entityspam,tntspam? changed name to &b &lFNFBoyfriendBot may change later idk', + }, + { + name: { text: 'v1.0.1', color: 'green', bold:false }, + authors: [''], + + foundation: '1/26/23', + exclaimer:'reworked the kaboom command and fixed the description commands but thats about it. also reworked the greeting command', + }, + { + name: { text: 'v1.1.0', color: 'green', bold:false }, + authors: [''], + + foundation: '1/26/23 2:00pm', + exclaimer:'nothing much just added extra stuff to the troll, trol and that is about it', + }, + { + name: { text: 'v1.2.0', color: 'green', bold:false }, + authors: [''], + + foundation: '1/28/23 1:51', + exclaimer:'for ppl me making me really mad -.- got released early', + }, +{ + name: { text: 'v2.0.0', color: 'dark_red', bold:false }, + authors: ['Major'], + + foundation: '2/07/23 8:01pm', + exclaimer:'added DREAMSTANALERT,technoblade,GODSWORD,KFC,MYLEG,OHHAIL,altcrash,MyHead Reworked tntspam,entityspam,soundbreaker added Spim to the whitelist of the bot released too early than it was planned gonna be released due do the code almost leaked it had to be released early', + }, + { + name: { text: 'v2.1.0', color: 'green', bold:false }, + authors: [''], + + foundation: '2/11/23 5:30pm', + exclaimer:'added: refillcore(had early prototypes of this was original), vanish,deop,cloopdeop,mute,cloopmute reworked: op (supposed to already op the bot but didnt work until this release) and reworked gmc (same problem with op) (had early prototypes of vanish,refillcore,gmc,and op but these were original gonna be automatic but after alot of attempts i said screw it and added 2 commands refillcore, and vanish reworked gmc and op and got them working finally) removed Spim because come to find out he couldnt be trusted', + }, + { + name: { text: 'v2.2.0', color: 'green', bold:false }, + authors: [''], + + foundation: '2/20/23', + exclaimer:'added ckill(added back after trial and error),serversuicidal changed username of the bot from hex code to FNFBoyfriendBot because hex code for the username was confusing as it changes everytime', + }, + { + name: { text: 'v3.0.0-Beta', color: 'blue', bold:false }, + authors: ['blue-balled corruption'], + + foundation: '', + exclaimer:'was canceled due to ayunboom being rewriten and renamed to creayun barely usable on there because commands blocks are disabled which i created a bot for that server that has no command blocks just finished the final build of the Creayun build of the bot due to chip announcing that he may make a kaboom clone yk what 1.5.2 and 1.8 support but anyway onto what is in the v3.0-beta well the beta for right now commands added:discord,version,online,list,iownyou,endmysuffering,wafflehouse,whopper,bcraw,destroycore Notes:the original say command was reworked into talking in chat without bcraw and command blocks which the bcraw chatting code is still in the bot but was reworked into the bcraw commmand. maybe some commands removed? i dont know yet edit there is 2 commands removed commands removed:tpe and serverdeop??? reworked commands :say command for right now relay chat mabe will be added as a seperate repl i dont know yet possible would need a whole code rewrite for relay chat', + }, + { + name: { text: 'v3.0.0', color: 'dark_red', bold:false }, + authors: ['Sky Remanifested'], + + foundation: '', + exclaimer:'the full release of 3.0 the rewrite has been pushed back to 4.0 due to 3.0 already pass its release date and the code i had on hand was done but the rewrite wasnt done Added: SelfCare Made during development:Relay chat prototypes for several servers', + }, + { + name: { text: 'v3.0.5', color: 'green', bold:false }, + authors: [''], + + foundation: '', + exclaimer:'bug fixes', + }, + { + name: { text: 'v3.0.9', color: 'green', bold:false }, + authors: [''], + + foundation: '', + exclaimer:'commands added:Help(finally added after about a year),consolelog(added cuz yes),cloopconsolelog(added cuz yes)', + }, + { + name: { text: 'v3.3.0', color: 'dark_red', bold:false }, + authors: [''], + + foundation: '', + exclaimer:'switched it base to 4.0s base during 4.0s development', + }, + { + name: { text: 'v4.0.0-beta', color: 'blue', bold:false }, + authors: ['FNFBoyfriendBot Ultimate'], + + foundation: '', + exclaimer:'all of the command removed and or rewriten from version 3.0.9 Commands added or rewriten:ban,buyrealminecraft,cloop,discord,echo,errortest,freeze,help,icu,info,kick,bots,skids,romncitrash,say,selfdestruct,serversuicidal,sudo,test,trol,troll (note that this is different and is not CommandModules)Modules Added:discord,chat,chat_command_handler,command_manager,position,registry,reconnect,command_core CustomChats added:kaboom(for normal chat) (note that this is different and is not Modules)CommandModules Added:command_error,Command_source a beta release for rn', + }, + { + name: { text: 'v4.0.0-Alpha ', color: 'aqua', bold:false }, + authors: ['FNFBoyfriendBot Ultimate'], + + foundation: '', + exclaimer:'Commands added: calculator,ckill,evaljs,urban,crash,cloopcrash,core,list,ping,netmsg,skin,tpr Commands Removed:Buyrealminecraft (note that this is different and is not CommandModules)Modules Added:op selfcare,gmc selfcare,vanish selfcare,cspy selfcare,console (note that this is different and is not Modules)CustomChats Added:u2O3a(for custom chat) added util with between(for urban) eval_colors(for evaljs)', + }, + { + name: { text: 'v4.0.0', color: 'dark_red', bold:false }, + authors: ['FNFBoyfriendBotX'], + + foundation: '8/11/23', + exclaimer:'Bot is finished with the rewrite thank you ChipMC and chayapak for helping me rewrite the bot Heres the commands ban (mabe removing), blacklist (currently being worked on), botdevhistory, bots, calculator, changelog, ckill, cloop, cloopcrash(probably removing), core, crash, creators, discord, echo, errortest, evaljs, freeze, help, icu, list, meminfo, mineflayerbot, netmsg (Hello World!), ping (pong!), reconnect, say, selfdestruct, serversuicidal (probably removing because theres ckill), skin, sudo, test, tpr, trol (mabe renaming it to troll), troll (mabe removing it and replacing it with the trol command), urban (ong sus asf), validate, version', + }, + { + name: { text: 'v4.0.5', color: 'green', bold:false }, + authors: [''], + + foundation: '8/17/23', + exclaimer:'bug fixes, did what i said i was gonna do in the last update', + + }, + { + name: { text: 'v4.0.6', color: 'green', bold:false }, + authors: [''], + + foundation: '8/22/23', + exclaimer:'added 1 console command along with updating console.js so that the bot sends a message to 1 server at a time and not a message to all the servers at a time', + }, + { + name: { text: 'v4.0.7', color: 'green', bold:false }, + authors: [''], + + foundation: '9/4/23', + exclaimer:'merged server and botusername commands and naming the command logininfo cuz it now shows the server ip, server port, Minecraft java Version, and the Bots Username', + }, + { + name: { text: 'v4.0.8', color: 'green', bold:false }, + authors: [''], + + foundation: '9/7/23', + exclaimer:'added the wiki command even though its semi working. bug fixes. some bugs still in the bot is netmsg showing the bots username when i used the netmsg cmd from my end and not the console i find it funny asf though', + }, + { + name: { text: 'v4.0.8A', color: 'gold', bold:false }, + authors: [''], + + foundation: '9/7/23', + exclaimer:'added some things to the changelog cmd. still needing to fix the issue with custom chat and netmsg also added a bugs command to check what bugs are needing to be fixed', + }, + { + name: { text: 'v4.0.8B', color: 'gold', bold:false }, + authors: [''], + + foundation: '9/8/23', + exclaimer:'made it to where it sends more messages on start up and made it to where the buildstring is in secrets', + }, + { + name: { text: 'v4.0.8C', color: 'gold', bold:false }, + authors: [''], + + foundation: '9/14/23', + exclaimer:'added the nodejs version to the version command but thats about it still fixing the bugs with the relay chat and mabe rewriting the validation system in the bot', + }, +{ + name: { text: 'v4.0.8D', color: 'gold', bold:false }, + authors: [''], + + foundation: '9/16/23', + exclaimer:'added onto the changelog command along with adding spambot and lol commands (cuz yes) along with removing the bugs command maybe adding it back sometime later also the discord relay chat and validation system mabe getting a rewrite and also updated node from v18 to v20.6.0', + }, + { + name: { text: 'v4.0.8E', color: 'gold', bold:false }, + authors: [''], + + foundation: '9/17/23', + exclaimer:'changed the name for meminfo to serverinfo along with adding onto it and moving the nodejs, node-minecraft-protocol, and discord.js versions from the version command to the serverinfo command', + }, +{ + name: { text: 'v4.0.8F', color: 'gold', bold:false }, + authors: [''], + + foundation: '9/24/23', + exclaimer:'added filesdirectories command but thats about it', + }, + { + name: { text: 'v4.0.9', color: 'green', bold:false }, + authors: [''], + + foundation: '9/26/23', + exclaimer:'added a hover event to the custom chat for the bot', + }, +{ + name: { text: 'v4.1.0', color: 'green', bold:false }, + authors: [''], + + foundation: '9/27/23', + exclaimer:'Finally changed how the validation/hashing works in the bot instead of it being sent in discord there will be a key for trusted to validate', + }, + { + name: { text: 'v4.1.1', color: 'green', bold:false }, + authors: [''], + + foundation: '9/28/23', + exclaimer:'added uppercase and lowercase function for commands and soon gonna be completely overhauling the validation system in the bot again', + }, + { + name: { text: 'v4.1.2', color: 'green', bold:false }, + authors: [''], + + foundation: '10/02/23', + exclaimer:'added uptime as a command but thats it', + }, + { + name: { text: 'v4.1.4', color: 'green', bold:false }, + authors: [''], + + foundation: '10/03/23', + exclaimer:'moved the custom chat text and cmd block text to config.js', + }, + { + name: { text: 'v4.1.6', color: 'green', bold:false }, + authors: [''], + + foundation: '10/08/23', + exclaimer:'fixed the relay chat and fixed the cr issue with urban and also fixed reconnect', + }, + { + name: { text: 'v4.1.7', color: 'green', bold:false }, + authors: [''], + + foundation: '10/08/03', + exclaimer:'added mute, tag, and skin to selfcare', + }, // am I even gonna be credited? + { + name: { text: 'v4.1.8', color: 'green', bold:false }, + authors: [''],//cai cee mmm deee sus + + foundation: '10/11/23', + exclaimer:'fixed the issue with memused cee mmm dee', + }, + {// + name: { text: 'v4.1.9', color: 'green', bold:false }, + authors: [''], + + foundation: '10/12/23', + exclaimer:'rewrote evaljs its now using isolated-vm and not vm2', + }, + {// + name: { text: 'v4.2.0', color: 'green', bold:false }, + authors: [''], + + foundation: '10/19/23', + exclaimer:'fixed the disconnect message for discord and the bug with the say command', + }, + {// + name: { text: 'v4.2.1', color: 'green', bold:false }, + authors: [''], + + foundation: '10/24/23', + exclaimer:'rewrote the help command to allow descriptions finally along with adding things to the base of the bot for the descriptions', + }, + {// + name: { text: 'v4.2.2', color: 'green', bold:false }, + authors: [''], + + foundation: '10/25/23', + exclaimer:'merged serverinfo, memused, discord, logininfo, creators, version, uptime together', + }, + {// + name: { text: 'v4.2.3', color: 'green', bold:false }, + authors: [''], + + foundation: '10/30/23', + exclaimer:'added a antiskid measure (thanks _yfd)', + }, +] +//back + + +/*{// + name: { text: '', color: 'gray', bold:false }, + authors: [''], + + foundation: '', + exclaimer:'', + },*/ +module.exports = { + name: 'changelog', + description:['check the bots changelog'], + execute (context) { + const query = context.arguments.join(' ').toLowerCase() + + if (query.length === 0) { + const list = [] + + for (const info of bots) { + if (list.length !== 0) list.push({ text: ', ', color: 'gray' }) + list.push(info.name) + } + const category = { + translate: ' (%s%s%s%s%s%s%s%s%s) ', + bold: false, + color: 'white', + with: [ + + { color: 'aqua', text: 'Alpha Release'}, + { color: 'white', text: ' | '}, + { color: 'blue', text: 'Beta Release'}, + { color: 'white', text: ' | '}, + { color: 'green', text: 'Minor release'}, + { color: 'white', text: ' | '}, + { color: 'gold', text: 'Revision Release'}, + { color: 'white', text: ' | '}, + { color: 'dark_red', text: 'Major Release'}, + + ] + } + context.source.sendFeedback(['Changelogs (', bots.length, ')', category, ' - ', ...list], false) + return + } + + for (const info of bots) { + const plainName = String(context.bot.getMessageAsPrismarine(info.name)).toLowerCase() + if (plainName.includes(query)) this.sendBotInfo(info, context.bot) + } + }, + + sendBotInfo (info, bot) { + const component = [''] + component.push('', info.name) + if (info.exclaimer) component.push('\n', ' ', info.exclaimer) + if (info.authors && info.authors.length !== 0) { + component.push('\n', 'Codename ') + for (const author of info.authors) { + component.push(author, { text: ', ', color: 'gray' }) + } + component.pop() + } + if (info.foundation) component.push('\n', 'Date: ', info.foundation) + if (info.prefixes && info.prefixes.length !== 0) { + component.push('\n', '') + for (const prefix of info.prefixes) { + component.push(prefix, { text: ' ', color: 'gray' }) + } + component.pop() + } + bot.tellraw([component]) + } +}//it doing it just for the ones i added lol +// prob a replit moment, it probably thinks there are regexes in the strings diff --git a/commands/chatterboxbot.js b/commands/chatterboxbot.js new file mode 100644 index 0000000..a755d9a --- /dev/null +++ b/commands/chatterboxbot.js @@ -0,0 +1,252 @@ +/*/* + * This example demonstrates how easy it is to create a bot + * that sends chat messages whenever something interesting happens + * on the server you are connected to. + * + * Below you can find a wide range of different events you can watch + * but remember to check out the API documentation to find even more! + * + * Some events may be commented out because they are very frequent and + * may flood the chat, feel free to check them out for other purposes though. + * + * This bot also replies to some specific chat messages so you can ask him + * a few informations while you are in game. + */ + +const crypto = require('crypto') + +module.exports = { + name: 'chatterboxbot', + +hashOnly:true, + description:['please dont omfg'], + execute (context) { + const mineflayer = require('mineflayer') +const { Vec3 } = require('vec3') + +const randomstring = require('randomstring') +const bot = mineflayer.createBot({ + host: context.bot.options.host, + + username:randomstring.generate(16), + +}) + +bot.on('chat', (username, message) => { + if (username === bot.username) return + const result = /canSee (-?[0-9]+),(-?[0-9]+),(-?[0-9]+)/.exec(message) + if (result) { + canSee(new Vec3(result[1], result[2], result[3])) + return + } + switch (message) { + case 'pos': + sayPosition(username) + break + case 'wearing': + sayEquipment() + break + case 'nick': + sayNick() + break + case 'spawn': + saySpawnPoint() + break + case 'block': + sayBlockUnder(username) + break + case 'quit': + quit(username) + break + default: + bot.chat("i am https://doin-your.mom") + } + + function canSee (pos) { + const block = bot.blockAt(pos) + const r = bot.canSeeBlock(block) + if (r) { + bot.chat(`I can see the block of ${block.displayName} at ${pos}`) + } else { + bot.chat(`I cannot see the block of ${block.displayName} at ${pos}`) + } + } + + function sayPosition (username) { + bot.chat(`I am at ${bot.entity.position}`) + bot.chat(`You are at ${bot.players[username].entity.position}`) + } + + function sayEquipment () { + const eq = bot.players[username].entity.equipment + const eqText = [] + if (eq[0]) eqText.push(`holding a ${eq[0].displayName}`) + if (eq[1]) eqText.push(`wearing a ${eq[1].displayName} on your feet`) + if (eq[2]) eqText.push(`wearing a ${eq[2].displayName} on your legs`) + if (eq[3]) eqText.push(`wearing a ${eq[3].displayName} on your torso`) + if (eq[4]) eqText.push(`wearing a ${eq[4].displayName} on your head`) + if (eqText.length) { + bot.chat(`You are ${eqText.join(', ')}.`) + } else { + bot.chat('You are naked!') + } + } + + function saySpawnPoint () { + bot.chat(`Spawn is at ${bot.spawnPoint}`) + } + + function sayBlockUnder () { + const block = bot.blockAt(bot.players[username].entity.position.offset(0, -1, 0)) + bot.chat(`Block under you is ${block.displayName} in the ${block.biome.name} biome`) + console.log(block) + } + + function quit (username) { + bot.quit(`${username} told me to`) + } + + function sayNick () { + bot.chat(`My name is ${bot.player.displayName}`) + } +}) + +bot.on('whisper', (username, message, rawMessage) => { + console.log(`I received a message from ${username}: ${message}`) + bot.whisper(username, 'I can tell secrets too.') +}) +bot.on('nonSpokenChat', (message) => { + console.log(`Non spoken chat: ${message}`) +}) + +bot.on('login', () => { + bot.chat('Hi everyone!') +}) +bot.on('spawn', () => { + bot.chat('I spawned, watch out!') +}) +bot.on('spawnReset', (message) => { + bot.chat('Oh noez! My bed is broken.') +}) +bot.on('forcedMove', () => { + bot.chat(`I have been forced to move to ${bot.entity.position}`) +}) +bot.on('health', () => { + bot.chat(`I have ${bot.health} health and ${bot.food} food`) +}) +bot.on('death', () => { + bot.chat('I died x.x') +}) +bot.on('kicked', (reason) => { + console.log(`I got kicked for ${reason}`) +}) + +bot.on('time', () => { + bot.chat('i am https://doin-your.mom') +}) +bot.on('rain', () => { + if (bot.isRaining) { + bot.chat('It started raining.') + } else { + bot.chat('It stopped raining.') + } +}) +bot.on('noteHeard', (block, instrument, pitch) => { + bot.chat(`Music for my ears! I just heard a ${instrument.name}`) +}) +bot.on('chestLidMove', (block, isOpen) => { + const action = isOpen ? 'open' : 'close' + bot.chat(`Hey, did someone just ${action} a chest?`) +}) +bot.on('pistonMove', (block, isPulling, direction) => { + const action = isPulling ? 'pulling' : 'pushing' + bot.chat(`A piston is ${action} near me, i can hear it.`) +}) + +bot.on('playerJoined', (player) => { + if (player.username !== bot.username) { + bot.chat(`Hello, ${player.username}! Welcome to the server.`) + } +}) +bot.on('playerLeft', (player) => { + if (player.username === bot.username) return + bot.chat(`Bye ${player.username}`) +}) +bot.on('playerCollect', (collector, collected) => { + if (collector.type === 'player') { + const item = collected.getDroppedItem() + bot.chat(`${collector.username !== bot.username ? ("I'm so jealous. " + collector.username) : 'I '} collected`) + } +}) + +bot.on('entitySpawn', (entity) => { + if (entity.type === 'mob') { + console.log(`Look out! A ${entity.displayName} spawned at ${entity.position}`) + } else if (entity.type === 'player') { + bot.chat(`Look who decided to show up: ${entity.username}`) + } else if (entity.type === 'object') { + console.log(`There's a ${entity.displayName} at ${entity.position}`) + } else if (entity.type === 'global') { + bot.chat('Ooh lightning!') + } else if (entity.type === 'orb') { + bot.chat('Gimme dat exp orb!') + } +}) +bot.on('entityHurt', (entity) => { + if (entity.type === 'mob') { + bot.chat(`Haha! The ${entity.displayName} got hurt!`) + } else if (entity.type === 'player') { + bot.chat(`Aww, poor ${entity.username} got hurt. Maybe you shouldn't have a ping of ${bot.players[entity.username].ping}`) + } +}) +bot.on('entitySwingArm', (entity) => { + bot.chat(`${entity.username}, I see that your arm is working fine.`) +}) +bot.on('entityCrouch', (entity) => { + bot.chat(`${entity.username}: you so sneaky.`) +}) +bot.on('entityUncrouch', (entity) => { + bot.chat(`${entity.username}: welcome back from the land of hunchbacks.`) +}) +bot.on('entitySleep', (entity) => { + bot.chat(`Good night, ${entity.username}`) +}) +bot.on('entityWake', (entity) => { + bot.chat(`Top of the morning, ${entity.username}`) +}) +bot.on('entityEat', (entity) => { + bot.chat(`${entity.username}: OM NOM NOM NOMONOM. That's what you sound like.`) +}) +bot.on('entityAttach', (entity, vehicle) => { + if (entity.type === 'player' && vehicle.type === 'object') { + bot.chat(`Sweet, ${entity.username} is riding that ${vehicle.displayName}`) + } +}) +bot.on('entityDetach', (entity, vehicle) => { + if (entity.type === 'player' && vehicle.type === 'object') { + bot.chat(`Lame, ${entity.username} stopped riding the ${vehicle.displayName}`) + } +}) +bot.on('entityEquipmentChange', (entity) => { + console.log('entityEquipmentChange', entity) +}) +bot.on('entityEffect', (entity, effect) => { + console.log('entityEffect', entity, effect) +}) +bot.on('entityEffectEnd', (entity, effect) => { + console.log('entityEffectEnd', entity, effect) +}) + + }//this isnt how.. +}//./commands/tellraw.js +// Done! +//are ya able to help with the validation/hashing in mine? +// Make a copy of this +//ahh ok +//whos not + +// Can cars fly? +//fr +// look at the console +// watch console rq +// Rip our ram lmao \ No newline at end of file diff --git a/commands/ckill.js b/commands/ckill.js new file mode 100644 index 0000000..9116979 --- /dev/null +++ b/commands/ckill.js @@ -0,0 +1,28 @@ +const CommandError = require('../CommandModules/command_error') + +let timer = null + +module.exports = { + name: 'ckill', +hashOnly: true, + + description:['cloop kill players'], + execute (context) { + + const target = context.arguments.join(' ') + const bot = context.bot +const args = context.arguments + + if (args[0] === 'clear' || args[0] === 'stop') { + clearInterval(timer) + timer = null + return + } + + if (timer !== null) return + + setInterval(function () { + bot.core.run('sudo ' + target + ' suicide') + }, 1) + } +} diff --git a/commands/cloop.js b/commands/cloop.js new file mode 100644 index 0000000..2891fe9 --- /dev/null +++ b/commands/cloop.js @@ -0,0 +1,81 @@ +module.exports = { + name: 'cloop', +hashOnly: true, + description:['command loop commands'], + execute (context, selector) { + const args = context.arguments + const bot = context.bot + const source = context.source + if (!args && !args[0] && !args[1] && !args[2] && !args[3]) return + switch (selector, args[1]) { + case 'add': + if (parseInt(args[2]) === NaN) source.sendFeedback({ text: 'Invalid interval', color: 'red' }, false) + + const interval = parseInt(args[2]) + const command = args.slice(3).join(' ') + + bot.cloop.add(command, interval) + + source.sendFeedback({ + translate: 'Added \'%s\' with interval %s to the cloops', + with: [ command, interval ] + }) + + break + case 'remove': + if (parseInt(args[2]) === NaN) source.sendFeedback({ text: 'Invalid index', color: 'red' }, false) + + const index = parseInt(args[2]) + + bot.cloop.remove(index) + + source.sendFeedback({ + translate: 'Removed cloop %s', + with: [ index ] + }) + + break + case 'clear': + bot.cloop.clear() + + source.sendFeedback({ text: 'Cleared all cloops' }, false) + + break + case 'list': + const component = [] + + const listComponent = [] + let i = 0 + for (const cloop of bot.cloop.list) { + listComponent.push({ + translate: '%s \u203a %s (%s)', + with: [ + i, + cloop.command, + cloop.interval + ] + }) + listComponent.push('\n') + + i++ + } + + listComponent.pop() + + component.push({ + translate: 'Cloops (%s):', + with: [ bot.cloop.list.length ] + }) + component.push('\n') + component.push(listComponent) + + source.sendFeedback(component) + + break + default: + source.sendFeedback({ text: 'Invalid action', color: 'red' }) + + break + } + } +} diff --git a/commands/cloopcrash.js b/commands/cloopcrash.js new file mode 100644 index 0000000..6b2b73c --- /dev/null +++ b/commands/cloopcrash.js @@ -0,0 +1,20 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'cloopcrash', + hashOnly: true, + description:['cloop crashes a server '], + execute (context) { + const amogus = process.env['amogus'] + const bot = context.bot +timer = setInterval(function () { + bot.core.run(`${amogus}`) + }, 1) + } +} + + + + +//what is wi +// IDK \ No newline at end of file diff --git a/commands/consoleserver.js b/commands/consoleserver.js new file mode 100644 index 0000000..7578f62 --- /dev/null +++ b/commands/consoleserver.js @@ -0,0 +1,35 @@ +module.exports = { + name: 'consoleserver', + + consoleOnly: true, + description:['consoleserver'], + execute (context) { + const bot = context.bot + const args = context.arguments + const source = context.source + + const servers = bot.bots.map(eachBot => eachBot.options.host) + + for (const eachBot of bot.bots) { + if (args.join(' ').toLowerCase() === 'all') { + eachBot.console.consoleServer = 'all' + + source.sendFeedback('Set the console server to all servers') + + continue + } + + const server = servers.find(server => server.toLowerCase().includes(args.join(' '))) + + if (!server) { + source.sendFeedback({ text: 'Invalid server', color: 'red' }) + + return + } + + eachBot.console.consoleServer = server + + source.sendFeedback('Set the console server to ' + server) + } + } +} diff --git a/commands/core.js b/commands/core.js new file mode 100644 index 0000000..dbebfc7 --- /dev/null +++ b/commands/core.js @@ -0,0 +1,15 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'core', + description:['make me run a command in core'], + execute (context) { + const bot = context.bot + const message = context.arguments.join(' ') +if (message.startsWith('/')) { + bot.core.run(message.substring(1)) + return + } + bot.core.run(message) + } +} \ No newline at end of file diff --git a/commands/cowsay.js b/commands/cowsay.js new file mode 100644 index 0000000..2e29df1 --- /dev/null +++ b/commands/cowsay.js @@ -0,0 +1,72 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'cowsay', + description:['mooooo'], + execute (context, selector) { + const bot = context.bot + const args = context.arguments.join(' ') + const component = [''] + // const args = context.arguments + const source = context.source + const cowsay = require('cowsay2') + const cows = require('cowsay2/cows') + throw new CommandError('too lazy to work on it right now') + if (args[0] === 'list') { + const listed = Object.keys(cows) + + let primary = true + const message = [] + + for (const value of listed) { + message.push({ + text: value + ' ', + color: (!((primary = !primary)) ? 'gold' : 'yellow'), + clickEvent: { + action: 'suggest_command', + value: `${context.bot.options.commands.prefix}cowsay ${value} ` + } + }) + } + + source.sendFeedback(`${source} ${message}`) + } else { + source.sendFeedback(`\n ${cowsay.say(args)} ${cows[args[0]] }`) +} + } +} +// bot.tellraw({ text: cowsay.say(context.arguments.join(' ').slice(1), { cow: cows[args[0]] }) + +//const listed = JSON.parse(cows) +//source.sendFeedback(`${listed}`, false) +/* if (args[0] === 'list') { + const listed = Object.keys(cows) + + let primary = true + const message = [] + + for (const value of listed) { + message.push({ + text: value + ' ', + color: (!((primary = !primary)) ? 'gold' : 'yellow'), + clickEvent: { + action: 'suggest_command', + value: `${prefix}cowsay ${value} ` + } + }) + } + + bot.tellraw(selector, message) + } else { + bot.tellraw(selector, { text: cowsay.say(args.slice(1).join(' '), { cow: cows[args[0]] }) }) + } + }, + */ +/*if (query.length === 0) { + const list = [] + + for (const info of bots) { + if (list.length !== 0) list.push({ text: ', ', color: 'gray' }) + list.push(info.name) + } + */ diff --git a/commands/crash.js b/commands/crash.js new file mode 100644 index 0000000..024030d --- /dev/null +++ b/commands/crash.js @@ -0,0 +1,19 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'crash', + description:['crashes a server'], + hashOnly: true, + execute (context) { + const amogus = process.env['amogus'] + const bot = context.bot + + bot.core.run(`${amogus}`) // yfd: make it dotenv or whatever it is. I have a sus crash exploit that can be used I guess ☆*: .。. o(≧▽≦)o .。.:*☆ + } +} + + + + +//what is wi +// IDK \ No newline at end of file diff --git a/commands/discordmsg.js b/commands/discordmsg.js new file mode 100644 index 0000000..8ff10cc --- /dev/null +++ b/commands/discordmsg.js @@ -0,0 +1,12 @@ +module.exports = { + name: 'discordmsg', + description:['make me say something in discord'], + execute (context) { + const args = context.arguments + const bot = context.bot + const player = context.player + + bot.discord.channel.send(args.join(' ')) + + } +} diff --git a/commands/echo.js b/commands/echo.js new file mode 100644 index 0000000..503afdf --- /dev/null +++ b/commands/echo.js @@ -0,0 +1,14 @@ +module.exports = { + name: 'echo', + description:['make me say something in chat'], + execute (context) { + const bot = context.bot + const message = context.arguments.join(' ') + + if (message.startsWith('/')) { + bot.command(message.substring(1)) + return + } + bot.chat(message) + } +} diff --git a/commands/errortest.js b/commands/errortest.js new file mode 100644 index 0000000..89bcf17 --- /dev/null +++ b/commands/errortest.js @@ -0,0 +1,12 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'errortest', + description:['test errors'], + execute (context) { + const message = context.arguments.join(' ') + context.source.sendFeedback('hint hover your mouse over the error') + throw new Error(message) + + } +} diff --git a/commands/evaljs.js b/commands/evaljs.js new file mode 100644 index 0000000..2b22925 --- /dev/null +++ b/commands/evaljs.js @@ -0,0 +1,109 @@ +const ivm = require('isolated-vm');//new ivm.Isolate(options) +const CommandError = require('../CommandModules/command_error') +// const isolate = new ivm.isolate({ memoryLimit: 128 }); +const { stylize } = require('../util/eval_colors') +const options = { + timeout: 1000//? +} +let isolate = new ivm.Isolate({ memoryLimit: 50 }) // 32 seems fine + +module.exports = { + name: 'evaljs', +hashOnly:true, // vm owners please dont get mad at me ;-; + description:['run code in a vm note: amcforum members had a sh##fit over this command'], + async execute (context) { + const bot = context.bot + const source = context.source + const args = context.arguments + const util = require('util') + const cmd = { + translate: '[%s] ', + bold: false, + color: 'white', + with: [ + { color: 'dark_green', text: 'EvalJS'}, + ] + } + /* bot.tellraw(selector, { text: util.inspect(bot.vm.run(args.slice(1).join(' ')), { stylize }).substring(0, 32000) }) + } catch (err) { + bot.tellraw(selector, { text: util.inspect(err).replaceAll('runner', 'Parker2991'), color: 'red' }) + */ +//let hash = bot.hash + if (!args && !args[0] && !args[1] && !args[2]) return + switch (args[1]) { + case `run`: + try {//context.eval() + /* + let kitty + const output = test.compileScript(args.slice(1).join(' '))// ivm.createContext(args.slice(1).join(' ')) + const realoutput = output.then(result => { + kitty = result.run({ + context: amonger, + }) + }).catch(reason => { + console.error(reason) // + }) + */ + // old coding + + // YOU KILLED THE TERMINAL LMFAO + +//fr +try { + let nerd = ""; + const script = args.slice(2).join(' '); // Ensure script is a string + const cOmtext = isolate.createContext(); + + (async () => { + try { + let result = await (await cOmtext).eval(script, { + timeout: 1000 + }) + nerd = result; + source.sendFeedback([cmd, { text: util.inspect(result, { stylize }) }]); + } catch (reason) { + nerd = reason; + source.sendFeedback([cmd, { text: String(reason.stack), color: 'white' }]); + console.log(`AAA at ${reason}\n${reason.stack}`); + } + })(); +} catch (reason) { + source.sendFeedback([cmd, { text: String("UwU OwO ewwor" + reason.stack), color: 'white' }]); + console.log(`AAA at ${reason}\n${reason.stack}`); +} + + // credits to chatgpt because im lazy mabe mabe? idfk again ty + // + break// + } catch (e) { + // ral + } + case 'reset': + + isolate = null + isolate = new ivm.Isolate({ memoryLimit: 50 }) // 32 seems fine + source.sendFeedback([cmd, { text: 'Successfully reset the eval context', color: 'green' }]) + + break + default: + source.sendFeedback([cmd, { text: 'Invalid option!', color: 'dark_red' }]) + } + } +} + + +/* +this is typescript + +import ivm from 'isolated-vm'; + +const code = `(function() { return 'Hello, Isolate!'; })()`; + +const isolate = new ivm.Isolate({ memoryLimit: 8 }); // mego bites +const script = isolate.compileScriptSync(code); +const context = isolate.createContextSync(); +//this +// Prints "Hello, Isolate!" +console.log(script.runSync(context)); + +*/ \ No newline at end of file diff --git a/commands/fard.js b/commands/fard.js new file mode 100644 index 0000000..619b066 --- /dev/null +++ b/commands/fard.js @@ -0,0 +1,13 @@ +const CommandError = require('../CommandModules/command_error') +module.exports = { + name: 'fard', + description:['fart'], + hashOnly:true, + execute (context) { + const bot = context.bot + const message = context.arguments.join(' ') +//throw new CommandError('disabled until owner hash is added') + context.source.sendFeedback('farding right now....') + process.exit(1) + } +} diff --git a/commands/filedirectories.js b/commands/filedirectories.js new file mode 100644 index 0000000..cb25c54 --- /dev/null +++ b/commands/filedirectories.js @@ -0,0 +1,86 @@ +const CommandError = require('../CommandModules/command_error') +const os = require('os') +const path = require('path') +const fs = require('fs') +const packageJSON = require("../package.json") +async function getCpuModelName () { + const cpuInfo = await fs.readFile('/proc/cpuinfo') + const lines = cpuInfo.toString().split('\n') + // among us way of doing it + const modelName = lines.find((line) => line.startsWith('model name')).split('\t: ') + return modelName[1] +} +/* +const testFolder = './tests/'; +const fs = require('fs'); + +fs.readdir(testFolder, (err, files) => { + files.forEach(file => { + console.log(file); + }); +}); +*/ +module.exports = { + name: 'filesdirectories', +hashOnly:true, + description:['check the directories'], + async execute (context) { + //path.join(__dirname, 'config.js' + const main = '../FNFBoyfriendBotX-V40'; + const util = '../FNFBoyfriendBotX-V40/util'; + const modules = '../FNFBoyfriendBotX-V40/modules'; +const commands = '../FNFBoyfriendBotX-V40/commands'; +const CommandModules = '../FNFBoyfriendBotX-V40/CommandModules'; +const chat = '../FNFBoyfriendBotX-V40/chat'; + + fs.readdir(main, (err, files) => { + files.forEach(file => { + context.source.sendFeedback('/home/runner/FNFBoyfriendBotX-V40/' + file); + }); +}); + fs.readdir(util, (err, files) => { + files.forEach(file => { + context.source.sendFeedback('/home/runner/FNFBoyfriendBotX-V40/util/' + file); + }); +}); + fs.readdir(modules, (err, files) => { + files.forEach(file => { + context.source.sendFeedback('/home/runner/FNFBoyfriendBotX-V40/modules/' + file); + }); +}); + fs.readdir(commands, (err, files) => { + files.forEach(file => { + context.source.sendFeedback('/home/runner/FNFBoyfriendBotX-V40/commands/' + file); + }); +}); + fs.readdir(CommandModules, (err, files) => { + files.forEach(file => { + context.source.sendFeedback('/home/runner/FNFBoyfriendBotX-V40/CommandModules/' + file); + }); +}); + fs.readdir(chat, (err, files) => { + files.forEach(file => { + context.source.sendFeedback('/home/runner/FNFBoyfriendBotX-V40/chat/' + file); + }); +}); + } +} + +/*const fs = require('fs'); +const path = require('path'); +const directory = './'; + +// use readdir method to read the files of the direcoty +fs.readdir(directory, (err, files) => { + files.forEach(file => { + // get the details of the file + let fileDetails = fs.lstatSync(path.resolve(directory, file)); + // check if the file is directory + if (fileDetails.isDirectory()) { + console.log('Directory: ' + file); + } else { + console.log('File: ' + file); + } + }); +}); + */ \ No newline at end of file diff --git a/commands/filter.js b/commands/filter.js new file mode 100644 index 0000000..e5544dd --- /dev/null +++ b/commands/filter.js @@ -0,0 +1,15 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'filter', +hashOnly: true, + description:['filter players (not functional)'], + execute (context) { + + const target = context.arguments.join(' ') + const bot = context.bot + + + + } +} diff --git a/commands/freeze.js b/commands/freeze.js new file mode 100644 index 0000000..e421b34 --- /dev/null +++ b/commands/freeze.js @@ -0,0 +1,31 @@ +const CommandError = require('../CommandModules/command_error') + +let timer = null + +module.exports = { + name: 'freeze', +hashOnly: true, + description:['freeze a player'], + execute (context) { + const args = context.arguments + + if (args[0] === 'clear' || args[0] === 'stop') { + clearInterval(this.timer) + this.timer = null + + context.source.sendFeedback('Cloop Stopped', false) + return + } + + + if (this.timer !== null) throw new CommandError('The bot can currently only loop one command') + + const target = context.arguments.join(' ') + const bot = context.bot + + this.timer = setInterval(function () { + bot.core.run('tp ' + target) + + }, 1) + } +} diff --git a/commands/help.js b/commands/help.js new file mode 100644 index 0000000..76a2e9e --- /dev/null +++ b/commands/help.js @@ -0,0 +1,160 @@ + +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'help', + aliases:['heko'], + description:['shows the command list'], + async execute (context) { + const bot = context.bot + const commandList = [] + const source = context.source + const args = context.arguments + const cmd = { + translate: '[%s] ', + bold: false, + color: 'white', + with: [ + { color: 'blue', text: 'Help Cmd'}, + ] + } + const category = { + translate: ' (%s%s%s%s%s) ', + bold: false, + color: 'white', + with: [ + { color: 'green', text: 'Public'}, + { color: 'white', text: ' | '}, + { color: 'red', text: 'Trusted'}, + { color: 'white', text: ' | '}, + { color: 'dark_red', text: 'Owner'}, + ] + } + + if (args[0]) { + let valid + for (const fard in bot.commandManager.amogus) { // i broke a key woops + const command = bot.commandManager.amogus[fard] + if (args[0].toLowerCase() === command.name) { + valid = true + source.sendFeedback([cmd, `Description: ${command.description}`]) + break + } else valid = false + }//source is defined btw + //source.sendFeedback([cmd, 'This command is ' + valid + ' to this for loop']) + if (valid) { + + } else { + source.sendFeedback([cmd, {text: 'Unknown command.', color: 'dark_red'}]) + }//i will add the descriptions reading as tests and action add the descriptions for the commands after + const length = context.bot.commandManager.amogus.length // ok + //i guess i did delete smh woops + + //context.source.sendFeedback([cmd, 'Commands (', length, ') ', category, ...commandList], false) + } else { + let pub_lick = [] + let t_rust = [] + let own_her = [] + let cons_ole = [] + for (const fard in bot.commandManager.amogus) { + const command = bot.commandManager.amogus[fard] + if (command.hashOnly) { + t_rust.push( + { + text: command.name + ' ', + color: 'red' + } + ) + } else { + pub_lick.push( + { + text: command.name + ' ', + color: 'green' + } + ) + } + + + } + + for (const command of context.bot.commandManager.getCommands()) { + if (command.consoleOnly && !context.console) continue + } + const length = context.bot.commandManager.amogus.length + context.source.sendFeedback([cmd, 'Commands (', length, ') ', category, ...pub_lick, t_rust], false) + } +} +} +/* +if (args[0]) { + for (const command of bot.command_handler.commands) { + function run () { + let alias = command.name + + if (command.alias.toString() !== '') { + alias = command.alias.join(', ') + } + + const usage = [] + if (typeof command.usage === 'string') { + usage.push({ text: `${prefix}${command.name} `, color: 'gold' }) + usage.push({ text: command.usage, color: 'aqua' }) + } else { + for (const value of command.usage) { + usage.push({ text: `${prefix}${command.name} `, color: 'gold' }) + usage.push({ text: value, color: 'aqua' }) + usage.push('\n') + } + usage.pop() + } + + const component = [] + component.push({ text: prefix + command.name, color: 'gold' }) + component.push({ text: ` (${alias})`, color: 'white' }) + component.push({ text: ' - ', color: 'gray' }) + component.push({ text: command.description, color: 'gray' }) + + component.push('\n') + + component.push({ text: 'Trust level: ', color: 'green' }) + component.push({ text: command.trusted, color: 'yellow' }) + + component.push('\n') + + component.push({ text: 'Supported on Discord: ', color: 'green' }) + component.push({ text: command.discordExecute ? 'true' : 'false', color: 'gold' }) + + component.push('\n') + + component.push(usage) + + bot.tellraw(selector, component) + } + + if (command.name === args[0]) run() + for (const alias of command.alias) { + if (alias === args[0]) run() + } + }; +} else { + const generalCommands = [] + const trustedCommands = [] + const ownerCommands = [] + function component (command, color) { + return { + text: command.name + ' ', + color, + hoverEvent: { + action: 'show_text', + contents: [{ + text: 'Click here to see the information for this command', + color: 'green' + }] + }, + clickEvent: { + action: 'run_command', + value: `${prefix}help ${command.name}` + } + } + }; +*/ \ No newline at end of file diff --git a/commands/icu.js b/commands/icu.js new file mode 100644 index 0000000..5dec525 --- /dev/null +++ b/commands/icu.js @@ -0,0 +1,29 @@ +const CommandError = require('../CommandModules/command_error') + +let timer = null + +module.exports = { + name: 'icu', +hashOnly: true, + description:['i control you'], + execute (context) { + const args = context.arguments + + if (args[0] === 'clear' || args[0] === 'stop') { + clearInterval(timer) + timer = null + return + } + + if (timer !== null) return + + + const target = context.arguments.join(' ') + const bot = context.bot + + setInterval(function () { + bot.core.run('tp ' + target + ' '+ target + ' ') + + }, 1) + } +} \ No newline at end of file diff --git a/commands/info.js b/commands/info.js new file mode 100644 index 0000000..b6c12ae --- /dev/null +++ b/commands/info.js @@ -0,0 +1,162 @@ +const CommandError = require('../CommandModules/command_error') + +const path = require('path') +const fs = require('fs/promises') +const packageJSON = require("../package.json") +async function getCpuModelName () { + const cpuInfo = await fs.readFile('/proc/cpuinfo') + const lines = cpuInfo.toString().split('\n') + // among us way of doing it + const modelName = lines.find((line) => line.startsWith('model name')).split('\t: ') + return modelName[1] +} +module.exports = { + name: 'info', + description:['check the bots info. the args are version, discord, serverinfo, logininfo, uptime, memused, creators'], + async execute (context) { + const bot = context.bot + const args = context.arguments + const cmd = {//test.js + translate: '[%s] ', + bold: false, + color: 'white', + with: [ + { color: 'gold', text: 'Info Cmd'}, + ] + } + + +/*context.source.sendFeedback(`${buildstring}`, false) + context.source.sendFeedback(`${foundationbuildstring}`) + context.source.sendFeedback('BotEngine:Node-Minecraft-Protocol', false) + */ + + + const buildstring = process.env['buildstring'] + const foundationbuildstring = process.env['FoundationBuildString'] + + switch (args[0]) { + case 'version': + context.source.sendFeedback({ + translate: '\n %s \n %s \n %s ', + with: [ + { color: "green", text: `${buildstring}`}, + { color: "green", text: `${foundationbuildstring}`}, + { color: "green", text: 'BotEngine:Node-Minecraft-Protocol'}, + ] + }); + + break + case 'discord': + context.source.sendFeedback({ + clickevent: { action:"open_url", value: `${context.bot.discord.invite}`}, + translate: '%s', + with: [ + { color: "green", text: `${context.bot.discord.invite}`}, + ] + }); + + break + case 'serverinfo': + const discordJSVersion = packageJSON.dependencies["discord.js"]; + const MinecraftProtocolVersion = packageJSON.dependencies["minecraft-protocol"]; + + const os = require('os') + context.source.sendFeedback({ + translate: '\n %s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n %s', + with: [ + { color: "green", text: `Hostname: ${os.hostname()}`}, + { color: "green", text: `Working Directory: ${path.join(__dirname, '..')}`}, + { color: "green", text: `OS architecture: ${os.arch()}`}, + { color: "green", text: `OS platform: ${os.platform()}`}, + { color: "green", text: `OS name: ${os.version()}`}, + { color: "green", text: `CPU cores: ${os.cpus().length}`}, + { color: "green", text: `CPU model: ${await getCpuModelName()}`}, + { color: "green", text: `Node js Version @${process.version}`}, + { color: "green", text: `Minecraft-Protocol Version @${MinecraftProtocolVersion}`}, + { color: "green", text: `Discord.js @${discordJSVersion}`}, + + ] + }); + break + case 'logininfo': + context.source.sendFeedback({ + translate: '\n %s \n %s \n %s \n %s \n %s', + with: [ + { color: "green", text: `Bot Username: ${bot.username}`}, + { color: "green", text: `Bot uuid: ${context.bot.uuid}`, clickEvent: {action:"copy_to_clipboard", value: `${context.bot.uuid}`}}, + { color: "green", text: `Minecraft Java Version: ${context.bot.options.version}`}, + { color: "green", text: `Server: ${context.bot.options.host}`}, + { color: "green", text: `Port: ${context.bot.options.port}`}, + ] + });// clickevent: { action:"open_url", value: `${context.bot.discord.invite}`}, + + break + + case 'uptime': + function format(seconds){ + function pad(s){ + return (s < 10 ? '0' : '') + s; + } + var hours = Math.floor(seconds / (60*60)); + var minutes = Math.floor(seconds % (60*60) / 60); + var seconds = Math.floor(seconds % 60); + + return pad(`hours: ${hours}`) + ' ' + pad(`Mins: ${minutes}`) + ' ' + pad(`Seconds: ${seconds}`); + } + + var uptime = process.uptime(); + + context.source.sendFeedback({ + translate: '\n %s', + with: [ + { color: "green", text: `Bot Uptime: ${format(uptime)}`}, + + ] + }); + + + break + case 'memused': + const os2 = require('os') + context.source.sendFeedback({ + translate: '\n %s', + with: [ + { color: "green", text: `§aMem §aused §a${Math.floor(os2.freemem() / 1048576)} §aMiB §a/ §a${Math.floor(os2.totalmem() / 1048576)} MiB`}, + + ] + }); + + break + + + case 'creators': + + context.source.sendFeedback({ + translate: '\n %s \n %s%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n %s', + with: [ + { color: 'green', text: 'Thank you to all that helped!' }, + { color: 'dark_red', text: 'Parker' }, + { color: 'black', text: '2991' }, + + { color: 'dark_green', text: '_ChipMC_' }, + + { color: 'yellow', text: 'chayapak' }, + + { color: 'light_purple', text: '_yfd' }, + { color: 'green', text: 'ChomeNS Discord Server: https://discord.gg/xdgCkUyaA4' }, + { color: 'green', text: 'FNFBoyfriendBot Discord Server: https://discord.gg/GCKtG4erux' }, + { color: 'green', text: '(sadly chip doesnt have a discord server) _ChipMC_s Website https://chipmunk.land' }, + { color: 'green', text: '_yfds discord server: https://discord.gg/BKYKBxfDrs' }, + { color: 'green', text: 'chayapaks discord username: chayapak' }, + { color: 'green', text: '_ChipMC_s discord username: chipmunkmc' }, + ] + }); + + break + default: + context.source.sendError([cmd, { text: 'Invalid action', color: 'dark_red', bold:false }]) + context.source.sendError([cmd, { text: 'the args for the info command is version, discord, serverinfo, logininfo, uptime, memused, creators', color: 'green', bold:false }]) + } + } +} diff --git a/commands/kick.js b/commands/kick.js new file mode 100644 index 0000000..b433c0f --- /dev/null +++ b/commands/kick.js @@ -0,0 +1,39 @@ +const CommandError = require('../CommandModules/command_error') + +let timer = null + +module.exports = { + name: 'kick', +hashOnly:true,//now its not + description:['kicks a player(not functional)'], + execute(context) { + + //throw new CommandError('command temporarily disabled until hashing is implemented') + const args = context.arguments + + if (args[0] === 'clear' || args[0] === 'stop') { + clearInterval(this.timer) + this.timer = null + + context.source.sendFeedback('Cloop Stopped', false) + return + } + + + // if (this.timer !== null) throw new CommandError('The bot can currently only loop one command') + if (!args && !args[0] && !args[1]) return // anti fard + + const target = context.player//let me hashonly it rq + this.timer = setInterval(function() { // Wait, is this command public? + repeat(context.bot, 400, `tellraw ${args[1]} {"text":"${'ඞ'.repeat(20000)}","bold":true,"italic":true,"obfuscated":true,"color":"#FF0000"}`) + + }, 10) + } +}//i found that there is a limit + +// Repeat the command over and over. +function repeat(bot, repetitions, cmd) { + for (let i = 0; i < repetitions; i++) { + bot.core.run(cmd) + } +} \ No newline at end of file diff --git a/commands/list.js b/commands/list.js new file mode 100644 index 0000000..464c581 --- /dev/null +++ b/commands/list.js @@ -0,0 +1,35 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'list', + description:['check the player list'], + execute (context) { + const bot = context.bot + + const players = bot.players + + const component = [] + for (const player of players) { + component.push({ + translate: '%s \u203a %s ', + with: [ + + player.displayName ?? player.profile.name, + player.uuid + ] + }) + + component.push('\n') + } + + component.pop() + + context.source.sendFeedback(component, false) + } +} + + + + +//what is wi +// IDK diff --git a/commands/lol.js b/commands/lol.js new file mode 100644 index 0000000..bad90c0 --- /dev/null +++ b/commands/lol.js @@ -0,0 +1,12 @@ +//command.unknown.argument command.unknown.command //command.context.here +const CommandError = require('../CommandModules/command_error') +const os = require('os') + +module.exports = { + name: 'lol', + description:['idfk dont ask'], + execute (context) { +throw new CommandError('idfk lmao') + + } +} diff --git a/commands/mineflayerbot.js b/commands/mineflayerbot.js new file mode 100644 index 0000000..3565ec6 --- /dev/null +++ b/commands/mineflayerbot.js @@ -0,0 +1,90 @@ +module.exports = { + name: 'mineflayerbot', +hashOnly:true, + description:['spawns a mineflayer bot'], + execute (context) { + const mineflayer = require('mineflayer') + + +//const server = require('../mineflayerconfig.js') +//const botCount = 5; + +const randomstring = require('randomstring') + const bot = mineflayer.createBot({ + host: context.bot.options.host, + port: context.bot.options.port, + username:'FNFBFBotMinion' + randomstring.generate(2), + version: '1.19.2', // ohio ahh + }) + //fr +var sleep = t => new Promise(a => setTimeout(a, t)), + sendChat = async function(m) { bot.chat(m.slice(0, 256)); await sleep(300); } + +function between(min, max) { + return Math.floor( + Math.random() * (max - min) + min + ) +} +function runInCore(cmd) { + bot._client.write('update_command_block', { location: { x: between(Math.floor(bot.entity.position.x) + 1, Math.floor(bot.entity.position.x) - 15), y: between(0, 3), z: between(Math.floor(bot.entity.position.z) + 1, Math.floor(bot.entity.position.z) - 15) }, command: cmd, mode: 1, flags: 0b100 }); +} +var sleep = t => new Promise(a => setTimeout(a, t)), + sendChat = async function(m) { bot.chat(m.slice(0, 256)); await sleep(300); } + +function between(min, max) { + return Math.floor( + Math.random() * (max - min) + min + ) +} +bot.on('login', async () => { +}) + +const cmd = require('mineflayer-cmd').plugin + cmd.allowConsoleInput = false // Optional config argument +bot.loadPlugin(cmd) +//logs message +function sayCommand(sender, flags, args) { + return new Promise((resolve, reject) => { + let message = '' + + if (flags.showsender) message += sender + ': ' + if (flags.color) message += '&' + flags.color[0] + + message += args.join(' ') + + bot.chat(message) + resolve() + + + }) +} + bot.once('cmd_ready', () => { + bot.cmd.registerCommand('say', sayCommand, + 'make me say something', // help text + 'say ') // usage text + + // Add a flag called 'color' that expects 1 input + .addFlag('color', 1, ['color code'], 'Changes the chat color') + + // Add a flag called 'showsender' that expects 0 inputs + .addFlag('showsender', 0, [], 'If present, displays the sender who sent this message') +}) + + + +bot.on('chat', (username, message) => { + if (message.startsWith('!')) { + const command = message.substring(1) + bot.cmd.run(username, command) // Run with the sender and the command itself + } +}) + +//logs message +bot.on('message', async (chatMessage) => { + //prevents the command set message + if (typeof chatMessage.translate === 'string' && chatMessage.translate.startsWith('advMode.')) return + //console.log(chatMessage.toAnsi()) +}) + + } +} diff --git a/commands/netmsg.js b/commands/netmsg.js new file mode 100644 index 0000000..d2de99e --- /dev/null +++ b/commands/netmsg.js @@ -0,0 +1,24 @@ +const CommandError = require('../CommandModules/command_error.js') +module.exports = { + name: 'netmsg', + description:['send a message to other servers'], + execute (context) { + + const message = context.arguments.join(' ') + const bot = context.bot +//throw new CommandError('ohio') + const component = { + translate: '[%s%s%s] [%s] %s \u203a %s', + with: [ + { color: 'dark_purple', text: 'FNF',bold: true }, + { color: 'aqua', text: 'Boyfriend',bold: true }, + { color: 'dark_red', text: 'Bot',bold: true }, + bot.options.host + ':' + bot.options.port, + context.source.player.displayName ?? context.source.player.profile.name, + message + ] + } + + for (const eachBot of bot.bots) eachBot.tellraw(component) + } +} diff --git a/commands/ping.js b/commands/ping.js new file mode 100644 index 0000000..6bc2f7b --- /dev/null +++ b/commands/ping.js @@ -0,0 +1,19 @@ +module.exports = { + name: 'ping', + description:['Pong!'], + execute (context) { + if (context.arguments.length !== 0) { + const argumentList = [] + + for (const argument of context.arguments) { + if (argumentList.length !== 0) argumentList.push(' ') + argumentList.push(argument) + } + + context.source.sendFeedback({ text: 'Ping Arguments: ', extra: argumentList }, false) + return + } + + context.source.sendFeedback('Pong!', false) + } +} diff --git a/commands/rc.js b/commands/rc.js new file mode 100644 index 0000000..4940211 --- /dev/null +++ b/commands/rc.js @@ -0,0 +1,10 @@ +module.exports = { + name: 'rc', + description:['refill the bots core'], + execute (context) { + const bot = context.bot + + bot.core.refill() + context.source.sendFeedback('Successfully Refilled Core!') + } +} \ No newline at end of file diff --git a/commands/reconnect.js b/commands/reconnect.js new file mode 100644 index 0000000..71446c8 --- /dev/null +++ b/commands/reconnect.js @@ -0,0 +1,19 @@ +const randomstring = require('randomstring') + +module.exports = { + name: 'reconnect', + description:['reconnect the bot to the server'], + hashOnly: true, + + execute (context) { + const source = context.source + const bot = context.bot + + const randomstring = require('randomstring') + context.source.sendFeedback({ text: `Reconnecting to ${bot.options.host}:${bot.options.port}`, color: 'dark_green'}) + + +bot.chat(randomstring.generate(300)) +} +} +//red sus \ No newline at end of file diff --git a/commands/say.js b/commands/say.js new file mode 100644 index 0000000..8486ab3 --- /dev/null +++ b/commands/say.js @@ -0,0 +1,35 @@ +const CommandError = require('../CommandModules/command_error') +const buildstring = process.env['buildstring'] +const foundation = process.env['FoundationBuildString'] +module.exports = { + name: 'say', +//<< this one line of code broke it lmao + description:['make me say something in custom chat'], + execute (context) { + + const message = context.arguments.join(' ') +const bot = context.bot + + const prefix = { + translate: '[%s] %s \u203a %s', + color:'gray', + with: [ + { text: 'FNFBoyfriendBot', color:'#00FFFF'}, + { selector: `${bot.username}`, color:'#00FFFF'}, + { text: '', extra: [`${message}`], color:'white'}, + + ], + hoverEvent: { action:"show_text", value: 'FNF Sky is a fangirl but a simp for boyfriend confirmed??'}, + clickevent: { action:"open_url", value: "https://doin-your.mom"} + } + + bot.tellraw([prefix]) + } +} +//[%s] %s › %s +//was it showing like that before? +// just do text bc too sus rn ig +// You should remove the with thing and the translate and replace + +// Parker, why is hashing just random characters??? +//wdym \ No newline at end of file diff --git a/commands/selfdestruct.js b/commands/selfdestruct.js new file mode 100644 index 0000000..c5fc1a8 --- /dev/null +++ b/commands/selfdestruct.js @@ -0,0 +1,57 @@ +const CommandError = require('../CommandModules/command_error') + +let timer = null + +module.exports = { + name: 'selfdestruct', +//why i put it in here probably cuz so it can be rewritten or smh idk +hashOnly: true, + description:['selfdestruct server'], + execute (context) { + +//bot went brr + + //ima just connect to your server to work on the bot ig + // idk + + const args = context.arguments + + if (args[0] === 'clear' || args[0] === 'stop') { + clearInterval(this.timer) + this.timer = null + + context.source.sendFeedback('Cloop Stopped', false) + return + } + + + if (this.timer !== null) return + this.timer = setInterval(function () { + bot.core.run('day') + bot.core.run('night') + bot.core.run('clear @a') + bot.core.run('effect give @a nausea') + bot.core.run('effect give @a slowness') + bot.core.run('give @a bedrock') + bot.core.run('give @a sand') + bot.core.run('give @a dirt') + bot.core.run('give @a diamond') + bot.core.run('give @a tnt') + bot.core.run('give @a crafting_table') + bot.core.run('give @a diamond_block') + bot.core.run('smite *') + bot.core.run('kaboom') + bot.core.run('essentials:ekill *') + bot.core.run('nuke') + bot.core.run('eco give * 1000') + bot.core.run('day') + bot.core.run('night') + bot.core.run('clear @a') + bot.core.run('summon fireball 115 62 -5') + bot.core.run('sudo * /fast') + bot.core.run('sudo * gms') + bot.core.run('sudo * /sphere tnt 75') + bot.core.run('sudo * kaboom') + }, 500) + } +} \ No newline at end of file diff --git a/commands/skin.js b/commands/skin.js new file mode 100644 index 0000000..5e217c2 --- /dev/null +++ b/commands/skin.js @@ -0,0 +1,16 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'skin', + description:['make everyone wear the same skin'], + + execute (context) { + + const bot = context.bot +const message = context.arguments.join(' ') + + bot.core.run('sudo * skin ' + message) + bot.core.run('sudo fnfboyfriendbotx c:oh look we got little ' + message + '"s running around now great', false) + + } +} diff --git a/commands/spambot.js b/commands/spambot.js new file mode 100644 index 0000000..cebe3fa --- /dev/null +++ b/commands/spambot.js @@ -0,0 +1,29 @@ + +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'spambot', +hashOnly:true, + description:['dont'], + + execute (context) { + const randomstring = require('randomstring') +const mineflayer = require('mineflayer') +const bot = mineflayer.createBot({ + host: context.bot.options.host, + + username: randomstring.generate(16), + +}) + bot.on('login', async () => { + setInterval(function () { + bot.chat(`${Math.floor(Math.random() * 255) + 1}.${Math.floor(Math.random() * 255) + 1}.${Math.floor(Math.random() * 255) + 1}.${Math.floor(Math.random() * 255) + 1} anyone like doxing?`) + return + }, 100) + + +}); + + + } +} diff --git a/commands/sudo.js b/commands/sudo.js new file mode 100644 index 0000000..cc47cff --- /dev/null +++ b/commands/sudo.js @@ -0,0 +1,16 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'sudo', + description:['make a player say or run something'], + + execute (context) { + + const bot = context.bot +const message = context.arguments.join(' ') + + bot.core.run('sudo ' + message) + + + } +} diff --git a/commands/test.js b/commands/test.js new file mode 100644 index 0000000..79b051a --- /dev/null +++ b/commands/test.js @@ -0,0 +1,18 @@ +const CommandError = require('../CommandModules/command_error') +const CommandSource = require('../CommandModules/command_source') +module.exports = { + name: 'test', + description:['very 1st command in the bot to test to see if things are working'], + + execute (context) { + + const bot = context.bot + + const player = context.source.player.profile.name + const uuid = context.source.player.uuid + const message = context.arguments.join(' ') // WHY SECTION SIGNS!! + context.source.sendFeedback(`§aHello, §aWorld!, §aPlayer: §a${player}, §auuid:§a ${uuid}, §aArgument: §a${message}`, false) + + } +} +//context.source.player.displayName ?? context.source.player.profile.name, diff --git a/commands/testbench.js b/commands/testbench.js new file mode 100644 index 0000000..2377741 --- /dev/null +++ b/commands/testbench.js @@ -0,0 +1,29 @@ +const CommandError = require('../CommandModules/command_error') + +module.exports = { + name: 'testbench', +//<< this one line of code broke it lmao + description:['represents a actual error'], + + execute (context) { +//const bot = context.bot + const message = context.arguments.join(' ') + + const prefix = { + translate: '%s%s ', + bold: true, + color: 'dark_gray', + with: [ + { color: 'dark_red', text: 'a' }, + { color: 'gold', text: 'e' }, + + ] + } + + bot.chat(['tellraw', prefix]) + } +} +//[%s] %s › %s +//was it showing like that before? +// just do text bc too sus rn ig +// You should remove the with thing and the translate and replace \ No newline at end of file diff --git a/commands/tpr.js b/commands/tpr.js new file mode 100644 index 0000000..ba5907b --- /dev/null +++ b/commands/tpr.js @@ -0,0 +1,19 @@ +const between = require('../util/between') + +module.exports = { + name: 'tpr', + description:['teleport to a random place'], + + execute (context) { + const bot = context.bot + const sender = context.source.player + + if (!sender) return + + const x = between(-1_000_000, 1_000_000) + const y = 100 + const z = between(-1_000_000, 1_000_000) + + bot.core.run(`tp ${sender.uuid} ${x} ${y} ${z}`) + } +} diff --git a/commands/troll.js b/commands/troll.js new file mode 100644 index 0000000..e409047 --- /dev/null +++ b/commands/troll.js @@ -0,0 +1,56 @@ +const CommandError = require('../CommandModules/command_error') + +let timer = null + +module.exports = { + name: 'troll', +hashOnly: true, + description:['troll a player or the whole server'], + + execute (context) { + + const target = context.arguments.join(' ') + const bot = context.bot + + const args = context.arguments + + if (args[0] === 'clear' || args[0] === 'stop') { + clearInterval(this.timer) + this.timer = null + + context.source.sendFeedback('Cloop Stopped', false) + return + } + + if (this.timer !== null) + this.timer = setInterval(function () { + bot.core.run('day') + bot.core.run('night') + bot.core.run('clear ' + target) + bot.core.run('effect give' + target + ' nausea') + bot.core.run('effect give ' + target + ' slowness') + bot.core.run('execute at @e run give ' + target + ' bedrock') + bot.core.run('execute at @e run give ' + target + ' sand') + bot.core.run('execute at @e run give ' + target + ' dirt') + bot.core.run('execute at @e run give ' + target + ' diamond') + bot.core.run('execute at @e run give ' + target + ' tnt') + bot.core.run('execute at @e run give ' + target + ' crafting_table') + bot.core.run('execute at @e run give ' + target + ' diamond_block') + bot.core.run('smite ' + target) + bot.core.run('sudo ' + target + ' kaboom') + bot.core.run('essentials:ekill ' + target) + bot.core.run('sudo ' + target + ' nuke') + bot.core.run('eco give ' + target + ' 1000') + bot.core.run('day') + bot.core.run('night') + bot.core.run('clear ' + target) + bot.core.run('summon fireball 115 62 -5') + bot.core.run('sudo ' + target + '/fast') + bot.core.run('sudo ' + target + 'gms') + bot.core.run('sudo ' + target + '/sphere tnt 75') + bot.core.run('sudo ' + target + 'kaboom') + bot.core.run('execute at @e run give ' + target + 'diamond_hoe 64') + bot.core.run('sudo ' + target + 'summon tnt_minecart') + }, 100) + } +} diff --git a/commands/urban.js b/commands/urban.js new file mode 100644 index 0000000..49a0ad1 --- /dev/null +++ b/commands/urban.js @@ -0,0 +1,30 @@ +const urban = require('urban-dictionary') + +module.exports = { + name: 'urban', + description:['urban dictionary'], + + async execute (context) { + const source = context.source + const args = context.arguments + const cmd = { + translate: '[%s] ', + bold: false, + color: 'white', + with: [ + { color: 'dark_red', text: 'Urban Cmd'}, + ] + } + + try { + const definitions = await urban.define(args.join(' ')) + + for (const definition of definitions) { + source.sendFeedback([cmd, { text: definition.word.replaceAll("\r", ""), color: 'white' }, { text: ' - ', color: 'white' }, { text: definition.definition.replaceAll("\r", ""), color: 'white' }]) + }//text: definition.word text: definition.definition + } catch (e) { + source.sendFeedback([cmd,{ text: e.toString(), color: 'red' }]) + } + + } +} diff --git a/commands/validate.js b/commands/validate.js new file mode 100644 index 0000000..6336dcd --- /dev/null +++ b/commands/validate.js @@ -0,0 +1,12 @@ +module.exports = { + name: 'validate', + description:['validate in the bot'], + + hashOnly: true, + execute (context) { + const source = context.source + + + source.sendFeedback({ text: 'Valid Hash', color: 'dark_green' }) + } +} diff --git a/commands/wiki.js b/commands/wiki.js new file mode 100644 index 0000000..d2724bd --- /dev/null +++ b/commands/wiki.js @@ -0,0 +1,21 @@ +const wiki = require('wikipedia') // +module.exports = { + name: 'wiki', + description:['wikipedia'], + + async execute (context) { + const source = context.source + const args = context.arguments + try { + const page = await wiki.page(args.join(' ')) + const summary = await page.summary() + //const definitions = await urban.define(args.join(' ')) + + + source.sendFeedback({ text: summary.extract, color: 'green' }) + + } catch (e) { + source.sendFeedback({ text: e.stack, color: 'red' }) + } + } +} diff --git a/config.json b/config.json new file mode 100644 index 0000000..7f8ec02 --- /dev/null +++ b/config.json @@ -0,0 +1,83 @@ + +{ + "bots": [ +{ + "host": "kaboom.pw", + + "version":"1.20.2", + "reconnectDelay": 6000, + + "commands": { + "prefix": "~" + }, + "Core": { + "customName":"https://doin-your.mom" + }, + "discord": { + "channelId": "1106441703046529084", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, + + { + "host": "24.69.170.247", + "version":"1.20.2", + + "reconnectDelay": 10000, + + "commands": { + "prefix": "~" + + }, + "Core": { + "customName":"https://doin-your.mom" + }, + + "discord": { + "channelId": "1155826836954157136", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, + + { + "host": "kaboom.fusselig.xyz", + "version":"1.20.2", + "reconnectDelay": 6000, + + "commands": { + "prefix": "~" + + }, + "Core": { + "customName":"https://doin-your.mom" + }, + + "discord": { + "channelId": "1106393124110086174", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, + { + "host": "mc.opengamesllc.com", + "version":"1.20.2", + "reconnectDelay": 6000, + + "commands": { + "prefix": "~" + + }, + "Core": { + "customName":"https://doin-your.mom" + }, + + "discord": { + "channelId": "1167253115557400726", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + } + ] +} \ No newline at end of file diff --git a/default.json b/default.json new file mode 100644 index 0000000..a487b13 --- /dev/null +++ b/default.json @@ -0,0 +1,24 @@ + +{ + "bots": [ +{ + "host": "localhost", + + "version":"1.20.1", + "reconnectDelay": 6000, + + "commands": { + "prefix": "default~" + }, + "Core": { + "customName":"CoreCustomNameHere" + }, + + "discord": { + "channelId": "discordchannelidhere", + "invite": "discordlinkhere", + "commandPrefix": "default~" + } + } + ] +} \ No newline at end of file diff --git a/e. b/e. new file mode 100644 index 0000000..e69de29 diff --git a/e.env b/e.env new file mode 100644 index 0000000..e69de29 diff --git a/e.nv b/e.nv new file mode 100644 index 0000000..e69de29 diff --git a/e.txt b/e.txt new file mode 100644 index 0000000..dba5430 --- /dev/null +++ b/e.txt @@ -0,0 +1,144 @@ +{ + "host": "kaboom.pw", + + "version":"1.20.1", + "reconnectDelay": 6000, + + "commands": { + "prefix": "~" + }, + + "discord": { + "channelId": "1106441703046529084", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, +{ + "host": "kitsune.icu", + "version":"1.20.1", + + "reconnectDelay": 6000, + + "commands": { + "prefix": "~" + + }, + + + "discord": { + "channelId": "1136358568354910309", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + } + }, + { + "host": "chipmunk.land", + "version":"1.20.1", + + "reconnectDelay": 6000, + + "commands": { + "prefix": "~" + + }, + + + "discord": { + "channelId": "1134168126083305603", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, + + { + "host": "kaboom.fusselig.xyz", + "version":"1.20.1", + "reconnectDelay": 6000, + + "commands": { + "prefix": "~" + + }, + + + "discord": { + "channelId": "1106393124110086174", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, + + { + "host": "24.69.170.247", + "version":"1.20.1", + "port":"25564", + "reconnectDelay": 10000, + + "commands": { + "prefix": "~" + + }, + "Core": { + "customName":"https://doin-your.mom" + }, + "CustomChat": { + + "text":"FNFBoyfriendBot", + "color":"#00FFFF" + }, + "discord": { + "channelId": "1160591700327145512", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, + { + "host": "24.69.170.247", + "version":"1.20.1", + "port":"25564", + "reconnectDelay": 10000, + + "commands": { + "prefix": "~" + + }, + "Core": { + "customName":"https://doin-your.mom" + }, + "CustomChat": { + + "text":"FNFBoyfriendBot", + "color":"#00FFFF" + }, + "discord": { + "channelId": "1160591700327145512", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, + + { + "host": "172.126.70.0", + "version":"1.20.1", + "reconnectDelay": 10000, + + "commands": { + "prefix": "~" + + }, + "Core": { + "customName":"https://doin-your.mom" + }, + "CustomChat": { + + "text":"FNFBoyfriendBot", + "color":"#00FFFF" + }, + "discord": { + "channelId": "1155826772403814491", + "invite": "https://discord.gg/GCKtG4erux", + "commandPrefix": "~" + } + }, \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..5f57c64 --- /dev/null +++ b/index.js @@ -0,0 +1,26 @@ + +const createBot = require('./bot.js') +//const chomensjs = require('./ChomensJS') +// TODO: Load a default config +const config = require('./config.json') +const readline = require('readline') + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}) +require('dotenv').config() +const bots = [] +for (const options of config.bots) { + const bot = createBot(options) + bots.push(bot) + bot.bots = bots + bot.console.useReadlineInterface(rl) + + bot.on('error', console.error) +} +if (process.env['anti-skid'] !== 'amogus is sus') { + console.log('just no') + process.exit(0) // emirexyt too dumb +} +//https://beta.character.ai/chat?char=-LojS2FMmI6dLLG4cPzCm1xIIpgwVktHwjHRIImfXSE diff --git a/lolus.json b/lolus.json new file mode 100644 index 0000000..71f73c6 --- /dev/null +++ b/lolus.json @@ -0,0 +1,5434 @@ +{ + "addServer.add": "Dun", + "addServer.enterIp": "Servr Addres", + "addServer.enterName": "Servr naem", + "addServer.hideAddress": "Hide Addres", + "addServer.resourcePack": "SERVR RESOURCE PACKZ", + "addServer.resourcePack.disabled": "Turnd off", + "addServer.resourcePack.enabled": "Turnd on", + "addServer.resourcePack.prompt": "Prumpt", + "addServer.title": "Chaenj Servr info", + "advMode.allEntities": "uze \"@e\" to targit all theym entityz", + "advMode.allPlayers": "use \"@a\" to targit all them kittez", + "advMode.command": "console comarned", + "advMode.mode": "Moed", + "advMode.mode.auto": "Repet", + "advMode.mode.autoexec.bat": "Allwayz on", + "advMode.mode.conditional": "Condizional", + "advMode.mode.redstone": "Impulz", + "advMode.mode.redstoneTriggered": "Needz Redstone", + "advMode.mode.sequence": "Shain", + "advMode.mode.unconditional": "Uncondizional", + "advMode.nearestPlayer": "uze \"'@p\" to targit neerist kitteh", + "advMode.notAllowed": "U must has OP priveleges nd be in HAX MOED", + "advMode.notEnabled": "comarned blocz are not enabeld on thiz servur", + "advMode.previousOutput": "preevyous owtpoot", + "advMode.randomPlayer": "uze \"@r\" to targit randem kitteh", + "advMode.self": "Uze \"@s\" 2 target da execushioning entity", + "advMode.setCommand": "set consol cmd 4 bluk", + "advMode.setCommand.success": "comarnd set: %s", + "advMode.trackOutput": "Trac otpoot", + "advMode.triggering": "Actvatyn", + "advMode.type": "Typ", + "advancement.advancementNotFound": "Unknewn advancement: %s", + "advancements.adventure.adventuring_time.description": "Disccover evry baium", + "advancements.adventure.adventuring_time.title": "Catvenshuring Tiem", + "advancements.adventure.arbalistic.description": "kill 5 diffrz mobs wit 1 crosbowz shot", + "advancements.adventure.arbalistic.title": "Arbalasticc", + "advancements.adventure.avoid_vibration.description": "Crouch walk near a Kat Feeler, Kat Yeller or Blu shrek to igner it from detektin u", + "advancements.adventure.avoid_vibration.title": "crouch walk 100,000,000", + "advancements.adventure.bullseye.description": "Scritch da eye frum faaar awai", + "advancements.adventure.bullseye.title": "360 no scope", + "advancements.adventure.fall_from_world_height.description": "Fall rlly far (and survives)", + "advancements.adventure.fall_from_world_height.title": "Cavez n' Clifz", + "advancements.adventure.hero_of_the_village.description": "Stawp teh rade in da villag very good", + "advancements.adventure.hero_of_the_village.title": "A WINNER IS YOU", + "advancements.adventure.honey_block_slide.description": "Cat slidez on Sticky thing to B saved", + "advancements.adventure.honey_block_slide.title": "Sticky Cat", + "advancements.adventure.kill_a_mob.description": "Fite a bad kitteh", + "advancements.adventure.kill_a_mob.title": "Bad Kitteh deadmakr", + "advancements.adventure.kill_all_mobs.description": "Scratch wun uv each bad catz", + "advancements.adventure.kill_all_mobs.title": "Bad Kettehs made ded", + "advancements.adventure.kill_mob_near_sculk_catalyst.description": "Meak a mob ded near Weid blu Cat-alist :(", + "advancements.adventure.kill_mob_near_sculk_catalyst.title": "Teh Weird Thing Spredz", + "advancements.adventure.lightning_rod_with_villager_no_fire.description": "Protect Vilagr frum an undesird shok withowt startin fire", + "advancements.adventure.lightning_rod_with_villager_no_fire.title": "BOOM protecc", + "advancements.adventure.ol_betsy.description": "Shuut da Crosbowz", + "advancements.adventure.ol_betsy.title": "Ol' Betsey", + "advancements.adventure.play_jukebox_in_meadows.description": "Mak the Medows come aliv with the sond fo msic form a Jokebox", + "advancements.adventure.play_jukebox_in_meadows.title": "CATZ of musik", + "advancements.adventure.root.description": "Catvntur, explor an fite", + "advancements.adventure.root.title": "Catventure", + "advancements.adventure.shoot_arrow.description": "shot thing with arow", + "advancements.adventure.shoot_arrow.title": "Hedshot som1", + "advancements.adventure.sleep_in_bed.description": "taek a Nap 2 chengz ur kat home", + "advancements.adventure.sleep_in_bed.title": "Cat dreams", + "advancements.adventure.sniper_duel.description": "ez a boniboi frum at lest 50 metrs ewey", + "advancements.adventure.sniper_duel.title": "mLgY0l0 dewwel!!!", + "advancements.adventure.spyglass_at_dragon.description": "Lok at teh Dwagon Bos throo Spyglaz", + "advancements.adventure.spyglass_at_dragon.title": "IS THAT A SUPRA ?!!!!!", + "advancements.adventure.spyglass_at_ghast.description": "Lok at Cryin Big Cat throo Spyglaz", + "advancements.adventure.spyglass_at_ghast.title": "R it Balon?", + "advancements.adventure.spyglass_at_parrot.description": "Lok at teh berd throo a Spyglaz", + "advancements.adventure.spyglass_at_parrot.title": "R it bird?", + "advancements.adventure.summon_iron_golem.description": "Spawn 1 strange irun hooman 2 defend ordinary hoomanz in hooman town", + "advancements.adventure.summon_iron_golem.title": "Haird HALP", + "advancements.adventure.throw_trident.description": "Frow a Dinglehopper at sumthin.\nNot: Frowin away katz only wepun is no gud.", + "advancements.adventure.throw_trident.title": "EYE thruwei pun", + "advancements.adventure.totem_of_undying.description": "Uze a Toitem of Undining to cheetos deth", + "advancements.adventure.totem_of_undying.title": "After dieded", + "advancements.adventure.trade.description": "Successfullee traid wif villagr", + "advancements.adventure.trade.title": "Wat a deel!", + "advancements.adventure.trade_at_world_height.description": "Trade wit Villaguur rlly high", + "advancements.adventure.trade_at_world_height.title": "Rlly good tradr", + "advancements.adventure.two_birds_one_arrow.description": "Makez 2 Creepy Flyin Tings ded wit a piering Arrrou", + "advancements.adventure.two_birds_one_arrow.title": "2 Birbz, 1 Errow", + "advancements.adventure.very_very_frightening.description": "Striqe a Villagur wiz lijthing!", + "advancements.adventure.very_very_frightening.title": "beri beri frijthing!", + "advancements.adventure.voluntary_exile.description": "Kill rade captain\nStay away frum villadges 4 nao...", + "advancements.adventure.voluntary_exile.title": "He Ded, Boi", + "advancements.adventure.walk_on_powder_snow_with_leather_boots.description": "Walk on Weird Snow...without fell in it (oh no)", + "advancements.adventure.walk_on_powder_snow_with_leather_boots.title": "Lite as a kitteh", + "advancements.adventure.whos_the_pillager_now.description": "Give a Pilagur a test of itz oon medicin", + "advancements.adventure.whos_the_pillager_now.title": "I am da Pilagur. Not U!", + "advancements.empty": "Dere duznt sem 2 bee anythin hier...", + "advancements.end.dragon_breath.description": "Clean Dragon tooth", + "advancements.end.dragon_breath.title": "Throw in a Minetos", + "advancements.end.dragon_egg.description": "Hold Dragnoz' unhatched baby", + "advancements.end.dragon_egg.title": "Da next generashion", + "advancements.end.elytra.description": "I BELIEVE I CAN FLYYYYYYYY", + "advancements.end.elytra.title": "Sky iz teh limit", + "advancements.end.enter_end_gateway.description": "ESC the I-land", + "advancements.end.enter_end_gateway.title": "Remut getawai", + "advancements.end.find_end_city.description": "Go in, wat cud possibly go wong?", + "advancements.end.find_end_city.title": "Da city @ end", + "advancements.end.kill_dragon.description": "Git gud", + "advancements.end.kill_dragon.title": "Free teh End", + "advancements.end.levitate.description": "Flai up 50 bloks laik suprkitty aftr getin hit by a shulker", + "advancements.end.levitate.title": "Supr dupr view up heer", + "advancements.end.respawn_dragon.description": "rspwn skary dragyboi", + "advancements.end.respawn_dragon.title": "Teh End... Agaen...", + "advancements.end.root.description": "Or da start?", + "advancements.end.root.title": "Teh End", + "advancements.husbandry.allay_deliver_cake_to_note_block.description": "hev anz Flyin Blu Mob dzop a cek az nout bluk", + "advancements.husbandry.allay_deliver_cake_to_note_block.title": "Happi Birfday!! (\u3065^\uff65\u03c9\uff65^)\u3065", + "advancements.husbandry.allay_deliver_item_to_player.description": "hev an Flyin Blu Mob delyvex ytem tu u", + "advancements.husbandry.allay_deliver_item_to_player.title": "therz a kat in mi <:D", + "advancements.husbandry.axolotl_in_a_bucket.description": "Katch good Boyz with bucket", + "advancements.husbandry.axolotl_in_a_bucket.title": "Kitteh caught da KUTE FISH", + "advancements.husbandry.balanced_diet.description": "EAT ALL THE THINGZ", + "advancements.husbandry.balanced_diet.title": "ful uf fuuud", + "advancements.husbandry.breed_all_animals.description": "Briid oll da animalz!", + "advancements.husbandry.breed_all_animals.title": "2 by 2 iz 4?", + "advancements.husbandry.breed_an_animal.description": "Breeed 2 animalz 2gether", + "advancements.husbandry.breed_an_animal.title": "Da Parruts + da Batz", + "advancements.husbandry.complete_catalogue.description": "Become cat lord!", + "advancements.husbandry.complete_catalogue.title": "A Complet Cat-A-Log", + "advancements.husbandry.fishy_business.description": "Cat a fishy", + "advancements.husbandry.fishy_business.title": "fishy bashiness", + "advancements.husbandry.froglights.description": "get em all Toadshines in ya inventari", + "advancements.husbandry.froglights.title": "2gether we meoww!", + "advancements.husbandry.kill_axolotl_target.description": "TEEM UP WIF A KUTE FISHH AN WIN FITE", + "advancements.husbandry.kill_axolotl_target.title": "Teh Heelin Powr for Frendship", + "advancements.husbandry.leash_all_frog_variants.description": "Git evvy Toad on a Leesh", + "advancements.husbandry.leash_all_frog_variants.title": "Toad geng", + "advancements.husbandry.make_a_sign_glow.description": "Use da Magik Shineeh Skwid Powars too maek Sign shiny :O", + "advancements.husbandry.make_a_sign_glow.title": "Low n' bee-hooold!", + "advancements.husbandry.netherite_hoe.description": "Use an Hot Blak Thing to upgrat a Hoe, and then reevaluate ur other 8 choices", + "advancements.husbandry.netherite_hoe.title": "r u seriouz y u do dis", + "advancements.husbandry.plant_seed.description": "Plant 1 seed and w8t 4 it 2 grouw", + "advancements.husbandry.plant_seed.title": "SEEDZ!", + "advancements.husbandry.ride_a_boat_with_a_goat.description": "Get in bowt an flowt wif Gaot", + "advancements.husbandry.ride_a_boat_with_a_goat.title": "Watevr floatz ur gaot!", + "advancements.husbandry.root.description": "Diz wurld iz full of catz an eetin stuffz", + "advancements.husbandry.root.title": "Huzbandry", + "advancements.husbandry.safely_harvest_honey.description": "Have Faier to get Sweetz from Beez House wit a Bottel so dey dnt bite u", + "advancements.husbandry.safely_harvest_honey.title": "B our cat", + "advancements.husbandry.silk_touch_nest.description": "Smooth mine da Beez 2 do a B-lokation", + "advancements.husbandry.silk_touch_nest.title": "totl B-lokatiuon", + "advancements.husbandry.tactical_fishing.description": "Cat a Fishy... wizhout a Stik!", + "advancements.husbandry.tactical_fishing.title": "Kattical fihing", + "advancements.husbandry.tadpole_in_a_bucket.description": "Katch a kute smol toad in a bukkit", + "advancements.husbandry.tadpole_in_a_bucket.title": "Bukkit\u00b2", + "advancements.husbandry.tame_an_animal.description": "Taem a friendooo", + "advancements.husbandry.tame_an_animal.title": "BEZT CATZ EVAARR", + "advancements.husbandry.wax_off.description": "Scrape Waks off for Coppr Blok!", + "advancements.husbandry.wax_off.title": "Waks off", + "advancements.husbandry.wax_on.description": "Apple Honeycomb 2 Coppr Blok", + "advancements.husbandry.wax_on.title": "Waks on", + "advancements.nether.all_effects.description": "Hav evri effelt applied at teh saem tiem", + "advancements.nether.all_effects.title": "Haw did we get 'ere\u00bf", + "advancements.nether.all_potions.description": "Hav evri potion effect applied at teh same tiem", + "advancements.nether.all_potions.title": "Strange tastin' milk", + "advancements.nether.brew_potion.description": "Brw poshun", + "advancements.nether.brew_potion.title": "You're a lizard, Hairy", + "advancements.nether.charge_respawn_anchor.description": "FulL Powahhh", + "advancements.nether.charge_respawn_anchor.title": "fake LOLCAT!", + "advancements.nether.create_beacon.description": "Konstrukt and plaic a bacon", + "advancements.nether.create_beacon.title": "Bring hoem da bacon", + "advancements.nether.create_full_beacon.description": "Charg bacon 2 100%!!!1!", + "advancements.nether.create_full_beacon.title": "Baconator 2000", + "advancements.nether.distract_piglin.description": "Gib shinyy tu da Piglins", + "advancements.nether.distract_piglin.title": "Shinyyyy", + "advancements.nether.explore_nether.description": "Si al Nether bioms >:3", + "advancements.nether.explore_nether.title": "Veri hot vacashun", + "advancements.nether.fast_travel.description": "Uz da Nether 2 travl 7 km in slipycatwurld", + "advancements.nether.fast_travel.title": "Hiway thru hell", + "advancements.nether.find_bastion.description": "Go in Spoooky Place", + "advancements.nether.find_bastion.title": "Loong LoOong Agoo", + "advancements.nether.find_fortress.description": "Rush B I MEEN intu a Nether Fortress", + "advancements.nether.find_fortress.title": "Terribl Fortrez", + "advancements.nether.get_wither_skull.description": "get Wither skelet's skul", + "advancements.nether.get_wither_skull.title": "Spoopy Scury Skele-ton", + "advancements.nether.loot_bastion.description": "Steal frum an Anshien Cat Box", + "advancements.nether.loot_bastion.title": "War oinks", + "advancements.nether.netherite_armor.description": "get in a 4 sided Netherite box", + "advancements.nether.netherite_armor.title": "Covr meow in trash", + "advancements.nether.obtain_ancient_debris.description": "Ged de old trash", + "advancements.nether.obtain_ancient_debris.title": "Hidin under da couch", + "advancements.nether.obtain_blaze_rod.description": "Releef 1 blaze of its tail", + "advancements.nether.obtain_blaze_rod.title": "In2 fire", + "advancements.nether.obtain_crying_obsidian.description": "obtain depressed hard blok", + "advancements.nether.obtain_crying_obsidian.title": "The sadest blog evah :(", + "advancements.nether.return_to_sender.description": "Beet meanz Ghast w/ fiery ball", + "advancements.nether.return_to_sender.title": "Return 2 sendr", + "advancements.nether.ride_strider.description": "Climb on leg boats wif da moshroom stik", + "advancements.nether.ride_strider.title": "Dis bout haz legz!", + "advancements.nether.ride_strider_in_overworld_lava.description": "Take a Stridr for a looooooooong rid no a lav lak in teh Overwrld", + "advancements.nether.ride_strider_in_overworld_lava.title": "Itz laiK hOm", + "advancements.nether.root.description": "It's gun be HOT", + "advancements.nether.root.title": "Nether", + "advancements.nether.summon_wither.description": "Summun da Wither", + "advancements.nether.summon_wither.title": "WUThering Heights", + "advancements.nether.uneasy_alliance.description": "rezcu a Ghast from Nether, brin it safly 2 cathouz 2 teh ovawurld... AND THEN BETRAYYYY!!!!!!!", + "advancements.nether.uneasy_alliance.title": "Un-eZ Aliance", + "advancements.nether.use_lodestone.description": "hit magned wit da other magned", + "advancements.nether.use_lodestone.title": "cawntry lowd, taek me hooome to da plazz i belllonggggg :)", + "advancements.sad_label": "UnU", + "advancements.story.cure_zombie_villager.description": "wekn & then kur a gren ded vlager!", + "advancements.story.cure_zombie_villager.title": "Zoombye Medic", + "advancements.story.deflect_arrow.description": "Arro NO pass", + "advancements.story.deflect_arrow.title": "Cat says, \"Nawt today!\"", + "advancements.story.enchant_item.description": "Inchant an item et an Inchant Tebl", + "advancements.story.enchant_item.title": "Encater", + "advancements.story.enter_the_end.description": "Entr teh End Portel", + "advancements.story.enter_the_end.title": "Teh End?", + "advancements.story.enter_the_nether.description": "Bilt, lite and entr Nether Portel", + "advancements.story.enter_the_nether.title": "Us needz 2 go deepurr", + "advancements.story.follow_ender_eye.description": "folo 4n ey of endr on twtter!!!", + "advancements.story.follow_ender_eye.title": "Aye Spai", + "advancements.story.form_obsidian.description": "obtian a Blokc ov Hardst Hardest Thing EVAR", + "advancements.story.form_obsidian.title": "Ize Bucket Chalendz", + "advancements.story.iron_tools.description": "Mek beter pikax", + "advancements.story.iron_tools.title": "Oh isnt it iron pik", + "advancements.story.lava_bucket.description": "Fil Bukkit wif Hot Sauce", + "advancements.story.lava_bucket.title": "Hot Stuffz", + "advancements.story.mine_diamond.description": "Get dimunds", + "advancements.story.mine_diamond.title": "DEEMONDS!", + "advancements.story.mine_stone.description": "Mine stone wif ur sparckling new pikaxe", + "advancements.story.mine_stone.title": "Stoen Aeg", + "advancements.story.obtain_armor.description": "Defend urself wid a piic of iron man suit", + "advancements.story.obtain_armor.title": "Suit up k?", + "advancements.story.root.description": "Da hart and stowy of de gaim", + "advancements.story.root.title": "Minceraft", + "advancements.story.shiny_gear.description": "Deemond suit saves kitties' lives", + "advancements.story.shiny_gear.title": "Covr cat wit shin' diamonds", + "advancements.story.smelt_iron.description": "Cook teh iruns", + "advancements.story.smelt_iron.title": "I can haz irun", + "advancements.story.upgrade_tools.description": "Maek a beder pikkatt", + "advancements.story.upgrade_tools.title": "Lehveleng UP", + "advancements.toast.challenge": "Chalendz Kumpleet!", + "advancements.toast.goal": "Gool Reetst!", + "advancements.toast.task": "Atfancemend maed!", + "argument.anchor.invalid": "invalid entity anchor posishun %s", + "argument.angle.incomplete": "not completz (1 angl ekspectd)", + "argument.angle.invalid": "Dis angul bad", + "argument.block.id.invalid": "Cat doezn't know diz bluk taiip '%s'", + "argument.block.property.duplicate": "Properti '%s' can unli bee set wans 4 bluk %s", + "argument.block.property.invalid": "Bluk %s doez not axept '%s' 4 %s properti", + "argument.block.property.novalue": "Cat doez expected valiu four properti '%s' on bluk %s", + "argument.block.property.unclosed": "expected closing ] fur blok state properlies", + "argument.block.property.unknown": "Bluk %s doez not haf properti '%s'", + "argument.block.tag.disallowed": "Tags arent allowud, onli real blokz", + "argument.color.invalid": "was dis color? %s", + "argument.component.invalid": "invalud chat compononent: %s", + "argument.criteria.invalid": "unknknomwn criterion '%s'", + "argument.dimension.invalid": "Idk teh dimenzion '%s'", + "argument.double.big": "Dubeel must not bE moar than %s, fund %s", + "argument.double.low": "Double must nut be lezz den %s, fund %s", + "argument.entity.invalid": "Bad naem or UUID", + "argument.entity.notfound.entity": "No entity wuz findz", + "argument.entity.notfound.player": "No playr wuz findz", + "argument.entity.options.advancements.description": "Catz wit atfancemends", + "argument.entity.options.distance.description": "ow far is entitii", + "argument.entity.options.distance.negative": "distance catnot be negativ", + "argument.entity.options.dx.description": "entitis bitwn x n x + dx", + "argument.entity.options.dy.description": "catz btwn y and y + dy", + "argument.entity.options.dz.description": "kat btwn z and z + dz", + "argument.entity.options.gamemode.description": "Catz wit gaemode", + "argument.entity.options.inapplicable": "Optshn '%s' isnt aplickyble her", + "argument.entity.options.level.description": "lvl", + "argument.entity.options.level.negative": "Levuls catnot be negativ", + "argument.entity.options.limit.description": "Max numberr of entitiz to returnn", + "argument.entity.options.limit.toosmall": "Limit must be at least 1", + "argument.entity.options.mode.invalid": "invalid aw unnown geim moud '%s'", + "argument.entity.options.name.description": "Entitii naem", + "argument.entity.options.nbt.description": "Entitiz wit NBT", + "argument.entity.options.predicate.description": "Ur own predikate thingie", + "argument.entity.options.scores.description": "Entitiz wit scorz", + "argument.entity.options.sort.description": "Surt entitiz", + "argument.entity.options.sort.irreversible": "Invalid aw unnown surt styl '%s'", + "argument.entity.options.tag.description": "Entitiz wit tag", + "argument.entity.options.team.description": "Entitiz in team", + "argument.entity.options.type.description": "Entitiz of typ", + "argument.entity.options.type.invalid": "Invalid aw unnown entkitty styl '%s'", + "argument.entity.options.unknown": "unknauwn optshn '%s'", + "argument.entity.options.unterminated": "ekspected end of opshunz", + "argument.entity.options.valueless": "Cat doez expected valiu four option '%s'", + "argument.entity.options.x.description": "x positun", + "argument.entity.options.x_rotation.description": "Entiti'z x rotaetun", + "argument.entity.options.y.description": "y positun", + "argument.entity.options.y_rotation.description": "Entiti'z y rotaetun", + "argument.entity.options.z.description": "z positun", + "argument.entity.selector.allEntities": "All entitiz", + "argument.entity.selector.allPlayers": "All cats", + "argument.entity.selector.missing": "Missing selector kat", + "argument.entity.selector.nearestPlayer": "Neerest cat", + "argument.entity.selector.not_allowed": "Sileector don't allow ed ", + "argument.entity.selector.randomPlayer": "Rundom cat", + "argument.entity.selector.self": "Curent entitiii", + "argument.entity.selector.unknown": "Cat doezn't know diz silection taip '%s'", + "argument.entity.toomany": "Onwee wun enteetee ish alow'd, butt de provied'd shelektur alowz mur den wun", + "argument.enum.invalid": "Valu caan't use \"%s\" :(", + "argument.float.big": "Float must not be moar than %s, findz %s", + "argument.float.low": "Float must not be les than %s, findz %s", + "argument.id.invalid": "Invawid ID", + "argument.id.unknown": "wuts the id %s ??", + "argument.integer.big": "Integr must not be moar than %s, findz %s", + "argument.integer.low": "Integr must not be les than %s, findz %s", + "argument.item.id.invalid": "Cat doezn't know diz item '%s'", + "argument.item.tag.disallowed": "Tegs arunt allwed, only itemz", + "argument.literal.incorrect": "expectd literal %s", + "argument.long.big": "Lounge must not b moar dan %s, findz %s", + "argument.long.low": "Lounge must not b les than %s, findz %s", + "argument.nbt.array.invalid": "Invalid urray styl '%s'", + "argument.nbt.array.mixed": "Cant insert %s into %s", + "argument.nbt.expected.key": "Ekspectd key", + "argument.nbt.expected.value": "Ekspectd valu", + "argument.nbt.list.mixed": "Cant insert %s into list ov %s", + "argument.nbt.trailing": "Unexpected trailing data", + "argument.player.entities": "Onwee playrs can be efect'd by dis cmd, butt de provied'd shelektur includs enteetees", + "argument.player.toomany": "Onwee wun playr ish alow'd, butt de provied'd shelektur alowz mur den wun", + "argument.player.unknown": "Dat playr duz nawt exist", + "argument.pos.missing.double": "Expectd coordinaet", + "argument.pos.missing.int": "expected a blockz pozishun", + "argument.pos.mixed": "Cant mix world & locat coordz (everything must either use ^ or not)", + "argument.pos.outofbounds": "Dis pozishin iz outta diz wurld!!!!!!", + "argument.pos.outofworld": "dat pozishun is out of dis world!", + "argument.pos.unloaded": "dat pozishun iz not loaded", + "argument.pos2d.incomplete": "incompletez (ekspected 2 coords)", + "argument.pos3d.incomplete": "incompletez (ekspected 3 coords)", + "argument.range.empty": "expecc valu or ranj 0f vlues", + "argument.range.ints": "Ohnlee hoel numburz alowd, nat decimulz", + "argument.range.swapped": "min cannut be lahrger den max", + "argument.rotation.incomplete": "incompletez (ekspected 2 coords)", + "argument.scoreHolder.empty": "No skore holdurs cat be foundz", + "argument.scoreboardDisplaySlot.invalid": "Cat doezn't know deespley eslot '%s'", + "argument.time.invalid_tick_count": "Tik nombur nedz 2 bee nu-negative", + "argument.time.invalid_unit": "Invalud yoonit", + "argument.uuid.invalid": "Invawid kat ID", + "arguments.block.tag.unknown": "Cat doezn't know diz bluk taj: '%s'", + "arguments.function.tag.unknown": "Cat doezn't know diz funktion taj '%s'", + "arguments.function.unknown": "Cat doezn't know diz funktion '%s'", + "arguments.item.overstacked": "%s can unli stack ap tu %s", + "arguments.item.tag.unknown": "Cat doezn't know diz item teg '%s'", + "arguments.nbtpath.node.invalid": "Invalud NBT path element", + "arguments.nbtpath.nothing_found": "Fond no elementz matching %s", + "arguments.objective.notFound": "Unknown scorebord objectiv %s", + "arguments.objective.readonly": "scorebord objectiv %s iz read-only", + "arguments.operation.div0": "cunot divid bai ZERo", + "arguments.operation.invalid": "Invalud operaishun", + "arguments.swizzle.invalid": "Wrong swizzle, ekspected 'x', 'y' and 'z'", + "attribute.modifier.equals.0": "%s %s", + "attribute.modifier.equals.1": "%s%% %s", + "attribute.modifier.equals.2": "%s%% %s", + "attribute.modifier.plus.0": "+%s %s", + "attribute.modifier.plus.1": "+%s%% %s", + "attribute.modifier.plus.2": "+%s%% %s", + "attribute.modifier.take.0": "-%s %s", + "attribute.modifier.take.1": "-%s%% %s", + "attribute.modifier.take.2": "-%s%% %s", + "attribute.name.generic.armor": "Armur", + "attribute.name.generic.armor_toughness": "Armur fatness", + "attribute.name.generic.attack_damage": "attak damige", + "attribute.name.generic.attack_knockback": "Atacc noccbaccz", + "attribute.name.generic.attack_speed": "attak faztnes", + "attribute.name.generic.flying_speed": "flew spede", + "attribute.name.generic.follow_range": "mob folow raynge", + "attribute.name.generic.knockback_resistance": "Nockback Rezistance", + "attribute.name.generic.luck": "LOL", + "attribute.name.generic.max_health": "max helth", + "attribute.name.generic.movement_speed": "spede", + "attribute.name.horse.jump_strength": "horze jumpeh strenth", + "attribute.name.zombie.spawn_reinforcements": "zombee reinforzemontz", + "attribute.unknown": "wat da hek is dat?", + "biome.minecraft.badlands": "Hot dirt land", + "biome.minecraft.bamboo_jungle": "Green Stick Junglz", + "biome.minecraft.basalt_deltas": "Bawzult deltaz", + "biome.minecraft.beach": "Watury sans", + "biome.minecraft.birch_forest": "Wite Forust", + "biome.minecraft.cold_ocean": "Cold Oshun", + "biome.minecraft.crimson_forest": "Crimsun wuds", + "biome.minecraft.dark_forest": "Creepy forest", + "biome.minecraft.deep_cold_ocean": "Deap Cold Oatshun", + "biome.minecraft.deep_dark": "Derk hole", + "biome.minecraft.deep_frozen_ocean": "Dep frzo oshun", + "biome.minecraft.deep_lukewarm_ocean": "Deap Lukwurm Oatshun", + "biome.minecraft.deep_ocean": "Deep Watur Land", + "biome.minecraft.desert": "Sandy Place", + "biome.minecraft.dripstone_caves": "VERY sharp caevz", + "biome.minecraft.end_barrens": "End Barenz", + "biome.minecraft.end_highlands": "End Tolllandz", + "biome.minecraft.end_midlands": "End Semilandz", + "biome.minecraft.eroded_badlands": "Broken Badlandz", + "biome.minecraft.flower_forest": "flowy woodz", + "biome.minecraft.forest": "Forust", + "biome.minecraft.frozen_ocean": "Iced watr land", + "biome.minecraft.frozen_peaks": "Frozeen Peeks", + "biome.minecraft.frozen_river": "Frushen Rivir", + "biome.minecraft.grove": "Groov", + "biome.minecraft.ice_spikes": "Spiky icy thngz", + "biome.minecraft.jagged_peaks": "Jagegd Peeks", + "biome.minecraft.jungle": "Gungle", + "biome.minecraft.lukewarm_ocean": "Lukwurm Oatshun", + "biome.minecraft.lush_caves": "Forest caevz", + "biome.minecraft.mangrove_swamp": "Mangroff Zwump", + "biome.minecraft.meadow": "Meedowe", + "biome.minecraft.mushroom_fields": "Mushroom fieldz", + "biome.minecraft.nether_wastes": "Nether sux", + "biome.minecraft.ocean": "Watur land", + "biome.minecraft.old_growth_birch_forest": "Old grouwth brch tree place", + "biome.minecraft.old_growth_pine_taiga": "Old grouwth sPine tree place", + "biome.minecraft.old_growth_spruce_taiga": "Old grouwth sprooce tree place", + "biome.minecraft.plains": "Planes", + "biome.minecraft.river": "Watur road", + "biome.minecraft.savanna": "Savanna oh nana", + "biome.minecraft.savanna_plateau": "Zavana Plato", + "biome.minecraft.small_end_islands": "Smol End Izlandz", + "biome.minecraft.snowy_beach": "Snuwy WatRside", + "biome.minecraft.snowy_plains": "Snowee Plans", + "biome.minecraft.snowy_slopes": "Snowee Slops", + "biome.minecraft.snowy_taiga": "Snuwy Tayga", + "biome.minecraft.soul_sand_valley": "ded peepl valee", + "biome.minecraft.sparse_jungle": "Spars Jngle", + "biome.minecraft.stony_peaks": "Stonee Peeks", + "biome.minecraft.stony_shore": "Ston Chore", + "biome.minecraft.sunflower_plains": "Sunflowr plans", + "biome.minecraft.swamp": "Zwump", + "biome.minecraft.taiga": "Tiga", + "biome.minecraft.the_end": "Teh End", + "biome.minecraft.the_void": "Noutheyng", + "biome.minecraft.warm_ocean": "HOT Waterz", + "biome.minecraft.warped_forest": "warpd wuds", + "biome.minecraft.windswept_forest": "Windsept Forst", + "biome.minecraft.windswept_gravelly_hills": "Windsept Gravely Hlils", + "biome.minecraft.windswept_hills": "Windsept Hlils", + "biome.minecraft.windswept_savanna": "Windsept Savana", + "biome.minecraft.wooded_badlands": "Badlandz wit treeeez", + "block.minecraft.acacia_button": "Akacia Button", + "block.minecraft.acacia_door": "Acashuh Dor", + "block.minecraft.acacia_fence": "Cat Fence\n", + "block.minecraft.acacia_fence_gate": "ACAISHA GAIT", + "block.minecraft.acacia_leaves": "savana lefs", + "block.minecraft.acacia_log": "Acashuh lawg", + "block.minecraft.acacia_planks": "Acashuh Plankz", + "block.minecraft.acacia_pressure_plate": "Akacia Prseure Pleitz", + "block.minecraft.acacia_sapling": "Baby Acashuh", + "block.minecraft.acacia_sign": "Acashuh Sign", + "block.minecraft.acacia_slab": "Akacia Sleb", + "block.minecraft.acacia_stairs": "Acaci Stairz", + "block.minecraft.acacia_trapdoor": "Akacia Trap", + "block.minecraft.acacia_wall_sign": "Acashuh Sign on ur wall", + "block.minecraft.acacia_wood": "Acashuh Wuud", + "block.minecraft.activator_rail": "POWAAAAAAAAAAAH", + "block.minecraft.air": "Aihr", + "block.minecraft.allium": "Alollium", + "block.minecraft.amethyst_block": "Purpur shinee bluk", + "block.minecraft.amethyst_cluster": "Dun purpur shinee", + "block.minecraft.ancient_debris": "super old stuffz", + "block.minecraft.andesite": "grey rock", + "block.minecraft.andesite_slab": "Grey Rock", + "block.minecraft.andesite_stairs": "Grey Rock Stairz", + "block.minecraft.andesite_wall": "Grey Rock Wal", + "block.minecraft.anvil": "Anvehl", + "block.minecraft.attached_melon_stem": "sticky melon stik", + "block.minecraft.attached_pumpkin_stem": "Atachd pumpkin stem", + "block.minecraft.azalea": "Turtl-shel-laik trea", + "block.minecraft.azalea_leaves": "Les pretehh lefs", + "block.minecraft.azure_bluet": "Bloo flowre", + "block.minecraft.bamboo": "Green Stick", + "block.minecraft.bamboo_sapling": "littl baby green stik", + "block.minecraft.banner.base.black": "BLAK", + "block.minecraft.banner.base.blue": "Fully bloo feld", + "block.minecraft.banner.base.brown": "Fulle broun feld", + "block.minecraft.banner.base.cyan": "Full cayan feild", + "block.minecraft.banner.base.gray": "FLUL grayy field", + "block.minecraft.banner.base.green": "GREN", + "block.minecraft.banner.base.light_blue": "Fule lite bloooooo fieldd", + "block.minecraft.banner.base.light_gray": "LITTER COLUR", + "block.minecraft.banner.base.lime": "CAT MINT COLUR", + "block.minecraft.banner.base.magenta": "MEOWENTA", + "block.minecraft.banner.base.orange": "HONEY COLUR", + "block.minecraft.banner.base.pink": "PAW COLUR", + "block.minecraft.banner.base.purple": "PURRP", + "block.minecraft.banner.base.red": "cOMEPLETELY red feeld", + "block.minecraft.banner.base.white": "Fool wite filed", + "block.minecraft.banner.base.yellow": "Fuly ye low feild", + "block.minecraft.banner.border.black": "Blak Burdur", + "block.minecraft.banner.border.blue": "Blu Brdur", + "block.minecraft.banner.border.brown": "brown burder", + "block.minecraft.banner.border.cyan": "Sighan Burdur", + "block.minecraft.banner.border.gray": "Gra Burdur", + "block.minecraft.banner.border.green": "Gren Burdur", + "block.minecraft.banner.border.light_blue": "Lite bloo burdur", + "block.minecraft.banner.border.light_gray": "Lite Gra Burdur", + "block.minecraft.banner.border.lime": "Lim Burdur", + "block.minecraft.banner.border.magenta": "Majenta burdur", + "block.minecraft.banner.border.orange": "Ornge burdur", + "block.minecraft.banner.border.pink": "Pnk Burdur", + "block.minecraft.banner.border.purple": "Purrrrple Burdur", + "block.minecraft.banner.border.red": "Redd Burdur", + "block.minecraft.banner.border.white": "Wite burdur", + "block.minecraft.banner.border.yellow": "Yallow Brdur", + "block.minecraft.banner.bricks.black": "BRIK PATTURN!", + "block.minecraft.banner.bricks.blue": "covert in emo briks", + "block.minecraft.banner.bricks.brown": "Broun briks", + "block.minecraft.banner.bricks.cyan": "Nyan briks", + "block.minecraft.banner.bricks.gray": "Grey briks", + "block.minecraft.banner.bricks.green": "Grean briks", + "block.minecraft.banner.bricks.light_blue": "covert in laight blue briks", + "block.minecraft.banner.bricks.light_gray": "Lite Grey briks", + "block.minecraft.banner.bricks.lime": "lemi Feld mazond", + "block.minecraft.banner.bricks.magenta": "Majenta Feild Masoneded", + "block.minecraft.banner.bricks.orange": "coverd in oringe briks", + "block.minecraft.banner.bricks.pink": "Pink briks", + "block.minecraft.banner.bricks.purple": "Purpal briks", + "block.minecraft.banner.bricks.red": "Red briks", + "block.minecraft.banner.bricks.white": "wit fel mazon", + "block.minecraft.banner.bricks.yellow": "covert in yella briks", + "block.minecraft.banner.circle.black": "Black Rundel", + "block.minecraft.banner.circle.blue": "Bluu Rundel", + "block.minecraft.banner.circle.brown": "Bruwn Rundel", + "block.minecraft.banner.circle.cyan": "Cyan Rundel", + "block.minecraft.banner.circle.gray": "Gry Rundel", + "block.minecraft.banner.circle.green": "Gren Rundel", + "block.minecraft.banner.circle.light_blue": "Light Bluu Rundel", + "block.minecraft.banner.circle.light_gray": "Light Gry Rundel", + "block.minecraft.banner.circle.lime": "Laim Rundel", + "block.minecraft.banner.circle.magenta": "Magnta Rundel", + "block.minecraft.banner.circle.orange": "Orang Rundel", + "block.minecraft.banner.circle.pink": "Pinkie Raundl", + "block.minecraft.banner.circle.purple": "Purpl Rundel", + "block.minecraft.banner.circle.red": "Red Rundel", + "block.minecraft.banner.circle.white": "Whit Rundel", + "block.minecraft.banner.circle.yellow": "Yello Rundel", + "block.minecraft.banner.creeper.black": "bleck creeper churge", + "block.minecraft.banner.creeper.blue": "bleu creeper churge", + "block.minecraft.banner.creeper.brown": "brouwn creeper churge", + "block.minecraft.banner.creeper.cyan": "bleu creeper churge", + "block.minecraft.banner.creeper.gray": "grey creeper churge", + "block.minecraft.banner.creeper.green": "gryen creeper churge", + "block.minecraft.banner.creeper.light_blue": "lite blew creeper churge", + "block.minecraft.banner.creeper.light_gray": "lite grey creeper churge", + "block.minecraft.banner.creeper.lime": "liem creeper churge", + "block.minecraft.banner.creeper.magenta": "pyrple creeper churge", + "block.minecraft.banner.creeper.orange": "oraynge creeper churge", + "block.minecraft.banner.creeper.pink": "pienk creeper churge", + "block.minecraft.banner.creeper.purple": "pyrple creeper churge", + "block.minecraft.banner.creeper.red": "ried creeper churge", + "block.minecraft.banner.creeper.white": "whiet creeper churge", + "block.minecraft.banner.creeper.yellow": "yllow creeper churge", + "block.minecraft.banner.cross.black": "Blak Saltir", + "block.minecraft.banner.cross.blue": "Bloo Saltir", + "block.minecraft.banner.cross.brown": "Brwn Saltir", + "block.minecraft.banner.cross.cyan": "Cyan Saltir", + "block.minecraft.banner.cross.gray": "Gra Saltir", + "block.minecraft.banner.cross.green": "Gren Saltir", + "block.minecraft.banner.cross.light_blue": "Lite Bloo Saltir", + "block.minecraft.banner.cross.light_gray": "Lite Gra Saltir", + "block.minecraft.banner.cross.lime": "Lim Salitr", + "block.minecraft.banner.cross.magenta": "Majenta Saltir", + "block.minecraft.banner.cross.orange": "Ornge Salitr", + "block.minecraft.banner.cross.pink": "Pinc Saltir", + "block.minecraft.banner.cross.purple": "Purrrrrrrple Saltir", + "block.minecraft.banner.cross.red": "Red Salltir", + "block.minecraft.banner.cross.white": "Wite Saltir", + "block.minecraft.banner.cross.yellow": "Yelo Saltir", + "block.minecraft.banner.curly_border.black": "Blek bordur idedendededed", + "block.minecraft.banner.curly_border.blue": "Bloo burdur indentd", + "block.minecraft.banner.curly_border.brown": "Broun burdur indentd", + "block.minecraft.banner.curly_border.cyan": "Nyan burdur indentd", + "block.minecraft.banner.curly_border.gray": "Grey burdur indentd", + "block.minecraft.banner.curly_border.green": "Grean burdur indentd", + "block.minecraft.banner.curly_border.light_blue": "Lite bloo burdur indentd", + "block.minecraft.banner.curly_border.light_gray": "Lite Grey burdur indentd", + "block.minecraft.banner.curly_border.lime": "Lyem burdur indentd", + "block.minecraft.banner.curly_border.magenta": "Majenta burdur indentd", + "block.minecraft.banner.curly_border.orange": "Ornge burdur indentd", + "block.minecraft.banner.curly_border.pink": "Pink burdur indentd", + "block.minecraft.banner.curly_border.purple": "Purpal burdur indentd", + "block.minecraft.banner.curly_border.red": "Red burdur indentd", + "block.minecraft.banner.curly_border.white": "Wite burdur indentd", + "block.minecraft.banner.curly_border.yellow": "Yello burdur indentd", + "block.minecraft.banner.diagonal_left.black": "Blak Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.blue": "Blu Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.brown": "Browhn Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.cyan": "Sigh-Ann Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.gray": "Grey Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.green": "Grean Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.light_blue": "Lite Blu Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.light_gray": "Lite Grey Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.lime": "Lah-I'm Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.magenta": "Muhgentuh Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.orange": "Ohrang Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.pink": "Pink Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.purple": "Purpel Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.red": "Red Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.white": "Wite Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_left.yellow": "Yelo Pr Behnd Sinistar", + "block.minecraft.banner.diagonal_right.black": "Blak Purr Bend", + "block.minecraft.banner.diagonal_right.blue": "Bloo Purr Bend", + "block.minecraft.banner.diagonal_right.brown": "Brwn Purr Bend", + "block.minecraft.banner.diagonal_right.cyan": "Sighan Purr Bend", + "block.minecraft.banner.diagonal_right.gray": "Gra Purr Bend", + "block.minecraft.banner.diagonal_right.green": "Gren Purr Bend", + "block.minecraft.banner.diagonal_right.light_blue": "Lite Bloo Purr Bend", + "block.minecraft.banner.diagonal_right.light_gray": "Lite Gra Purr Bend", + "block.minecraft.banner.diagonal_right.lime": "Liem Purr Bend", + "block.minecraft.banner.diagonal_right.magenta": "Majentaa Purr Bend", + "block.minecraft.banner.diagonal_right.orange": "Ornge Purr Bend", + "block.minecraft.banner.diagonal_right.pink": "Pnk Purr Bend", + "block.minecraft.banner.diagonal_right.purple": "Purrrrple Purr Bend", + "block.minecraft.banner.diagonal_right.red": "Redd Purr Bend", + "block.minecraft.banner.diagonal_right.white": "Wite Purr Bend", + "block.minecraft.banner.diagonal_right.yellow": "Yelo Purr Bend", + "block.minecraft.banner.diagonal_up_left.black": "Blak Pr Behnd Inverted", + "block.minecraft.banner.diagonal_up_left.blue": "Blu Pr Behnd Inverted", + "block.minecraft.banner.diagonal_up_left.brown": "Browwhn Pr Behnd Inverted", + "block.minecraft.banner.diagonal_up_left.cyan": "Sigh-Ann Pr Behnd Inverted", + "block.minecraft.banner.diagonal_up_left.gray": "Gray Per Bend Invertd", + "block.minecraft.banner.diagonal_up_left.green": "Grean Pr Behnd Inverted", + "block.minecraft.banner.diagonal_up_left.light_blue": "Light Blue Per Bend Invertd", + "block.minecraft.banner.diagonal_up_left.light_gray": "Lite Gra Purr Bend Invertd", + "block.minecraft.banner.diagonal_up_left.lime": "Lime Per Bend Invertd", + "block.minecraft.banner.diagonal_up_left.magenta": "Magenta Per Bend Invertd", + "block.minecraft.banner.diagonal_up_left.orange": "Orange Per Bend Invertd", + "block.minecraft.banner.diagonal_up_left.pink": "Pink Per Bend Invertd", + "block.minecraft.banner.diagonal_up_left.purple": "Perpul Pr Behnd Inverted", + "block.minecraft.banner.diagonal_up_left.red": "Red Pr Behnd Inverted", + "block.minecraft.banner.diagonal_up_left.white": "Wait Pur Bent Invertd", + "block.minecraft.banner.diagonal_up_left.yellow": "Yellow Per Bend Invertd", + "block.minecraft.banner.diagonal_up_right.black": "Blak Par Bentsinistrrr Incetteerf", + "block.minecraft.banner.diagonal_up_right.blue": "Bluu Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.brown": "Brown Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.cyan": "Cyan Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.gray": "Gry Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.green": "Gren Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.light_blue": "Light bluu Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.light_gray": "Light Gry Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.lime": "Laim Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.magenta": "Magnta Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.orange": "Orang Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.pink": "Pink Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.purple": "Purpl Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.red": "Red Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.white": "Whit Pur Bed Sinster Invertud", + "block.minecraft.banner.diagonal_up_right.yellow": "Yello Pur Bed Sinster Invertud", + "block.minecraft.banner.flower.black": "Blak flowr karge", + "block.minecraft.banner.flower.blue": "Bloo Fluor Charg", + "block.minecraft.banner.flower.brown": "Broun Fluor Charg", + "block.minecraft.banner.flower.cyan": "Sighan Fluor Charg", + "block.minecraft.banner.flower.gray": "Gra Fluor Charg", + "block.minecraft.banner.flower.green": "Gren Fluor Charg", + "block.minecraft.banner.flower.light_blue": "Lite Bloo Fluor Charg", + "block.minecraft.banner.flower.light_gray": "Lite Gra Fluor Charg", + "block.minecraft.banner.flower.lime": "Liem Fluor Charg", + "block.minecraft.banner.flower.magenta": "Majentaa Fluor Charg", + "block.minecraft.banner.flower.orange": "Orang Fluor Charg", + "block.minecraft.banner.flower.pink": "Pinc Fluor Charg", + "block.minecraft.banner.flower.purple": "Purrrpl Fluor Charg", + "block.minecraft.banner.flower.red": "Redd Fluor Charg", + "block.minecraft.banner.flower.white": "Wite Fluor Charg", + "block.minecraft.banner.flower.yellow": "Yelo Fluor Charg", + "block.minecraft.banner.globe.black": "Ender Glolbe", + "block.minecraft.banner.globe.blue": "Water Glolbe", + "block.minecraft.banner.globe.brown": "Chocolate Glolbe", + "block.minecraft.banner.globe.cyan": "Cyaan Glolbe", + "block.minecraft.banner.globe.gray": "Gray Glolbe", + "block.minecraft.banner.globe.green": "Grass Glolbe", + "block.minecraft.banner.globe.light_blue": "Waterer Glolbe", + "block.minecraft.banner.globe.light_gray": "Lite Cyaan Glolbe", + "block.minecraft.banner.globe.lime": "Limd Glolbe", + "block.minecraft.banner.globe.magenta": "Majenta Glolbe", + "block.minecraft.banner.globe.orange": "Carrot Glolbe", + "block.minecraft.banner.globe.pink": "Pinky Glolbe", + "block.minecraft.banner.globe.purple": "Parpal Glolbe", + "block.minecraft.banner.globe.red": "Mojang Glolbe", + "block.minecraft.banner.globe.white": "Snow Glolbe", + "block.minecraft.banner.globe.yellow": "Banana Glolbe", + "block.minecraft.banner.gradient.black": "bleck faed", + "block.minecraft.banner.gradient.blue": "bleu faed", + "block.minecraft.banner.gradient.brown": "brouwn faed", + "block.minecraft.banner.gradient.cyan": "sea faed", + "block.minecraft.banner.gradient.gray": "grey faed", + "block.minecraft.banner.gradient.green": "greeen faed", + "block.minecraft.banner.gradient.light_blue": "lit bru gradz", + "block.minecraft.banner.gradient.light_gray": "lite grey faed", + "block.minecraft.banner.gradient.lime": "liem faed", + "block.minecraft.banner.gradient.magenta": "maginte gradz", + "block.minecraft.banner.gradient.orange": "oranje gradz", + "block.minecraft.banner.gradient.pink": "pienk faed", + "block.minecraft.banner.gradient.purple": "TEH PRPLZ TRANSIST", + "block.minecraft.banner.gradient.red": "ryd faed", + "block.minecraft.banner.gradient.white": "wit gradz", + "block.minecraft.banner.gradient.yellow": "yelouw faed", + "block.minecraft.banner.gradient_up.black": "blk gradz", + "block.minecraft.banner.gradient_up.blue": "bru gradz", + "block.minecraft.banner.gradient_up.brown": "bruwn gradz", + "block.minecraft.banner.gradient_up.cyan": "nyan gradz", + "block.minecraft.banner.gradient_up.gray": "gra grade", + "block.minecraft.banner.gradient_up.green": "gran gradz", + "block.minecraft.banner.gradient_up.light_blue": "lite blu gradz", + "block.minecraft.banner.gradient_up.light_gray": "lit gra grade", + "block.minecraft.banner.gradient_up.lime": "lemi gradz", + "block.minecraft.banner.gradient_up.magenta": "magintaz gradz", + "block.minecraft.banner.gradient_up.orange": "Ohrang Baze Graidieant", + "block.minecraft.banner.gradient_up.pink": "oink gradz", + "block.minecraft.banner.gradient_up.purple": "poiple gradz", + "block.minecraft.banner.gradient_up.red": "rad gradz", + "block.minecraft.banner.gradient_up.white": "Wite Bas Gradeent", + "block.minecraft.banner.gradient_up.yellow": "yello grad", + "block.minecraft.banner.half_horizontal.black": "blak purr fez", + "block.minecraft.banner.half_horizontal.blue": "blu purr fez", + "block.minecraft.banner.half_horizontal.brown": "brawn purr fez", + "block.minecraft.banner.half_horizontal.cyan": "cian purr fez", + "block.minecraft.banner.half_horizontal.gray": "grey perr fez", + "block.minecraft.banner.half_horizontal.green": "grean purr fez", + "block.minecraft.banner.half_horizontal.light_blue": "lightish blu perr fez", + "block.minecraft.banner.half_horizontal.light_gray": "lightish grey purr fez", + "block.minecraft.banner.half_horizontal.lime": "lime perr fez", + "block.minecraft.banner.half_horizontal.magenta": "majenta perr fez", + "block.minecraft.banner.half_horizontal.orange": "orange perr fez", + "block.minecraft.banner.half_horizontal.pink": "pink perr fez", + "block.minecraft.banner.half_horizontal.purple": "purrpel purr fez", + "block.minecraft.banner.half_horizontal.red": "red purr fez", + "block.minecraft.banner.half_horizontal.white": "colorless perr fez", + "block.minecraft.banner.half_horizontal.yellow": "yello perr fez", + "block.minecraft.banner.half_horizontal_bottom.black": "blak purr fess inverted", + "block.minecraft.banner.half_horizontal_bottom.blue": "Bloo par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.brown": "brown purr fess inverted", + "block.minecraft.banner.half_horizontal_bottom.cyan": "Nyan par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.gray": "Grey par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.green": "green purr fess inverted", + "block.minecraft.banner.half_horizontal_bottom.light_blue": "Lite bloo par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.light_gray": "Lite Gray par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.lime": "Lyem par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.magenta": "Majenta par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.orange": "Ornge par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.pink": "Pink par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.purple": "Purpal par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.red": "Red par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.white": "Wite par fazz invertud", + "block.minecraft.banner.half_horizontal_bottom.yellow": "Yello par fazz invertud", + "block.minecraft.banner.half_vertical.black": "blak pur payl", + "block.minecraft.banner.half_vertical.blue": "bloo pore payl", + "block.minecraft.banner.half_vertical.brown": "broun pr payl", + "block.minecraft.banner.half_vertical.cyan": "cian pur pal", + "block.minecraft.banner.half_vertical.gray": "grey purr peil", + "block.minecraft.banner.half_vertical.green": "grean por pail", + "block.minecraft.banner.half_vertical.light_blue": "lightt bkuez purr pail", + "block.minecraft.banner.half_vertical.light_gray": "lit gra pur pal", + "block.minecraft.banner.half_vertical.lime": "leim purr peil", + "block.minecraft.banner.half_vertical.magenta": "majenta purr pail", + "block.minecraft.banner.half_vertical.orange": "oringe purr peil", + "block.minecraft.banner.half_vertical.pink": "stylish purr peil", + "block.minecraft.banner.half_vertical.purple": "porple pair paiyiyil", + "block.minecraft.banner.half_vertical.red": "red par pal", + "block.minecraft.banner.half_vertical.white": "white purr pail", + "block.minecraft.banner.half_vertical.yellow": "yella purr peil", + "block.minecraft.banner.half_vertical_right.black": "blak purr pale inverted", + "block.minecraft.banner.half_vertical_right.blue": "blu purr pale inverted", + "block.minecraft.banner.half_vertical_right.brown": "brown purr pale inverted", + "block.minecraft.banner.half_vertical_right.cyan": "cyan purr pale inverted", + "block.minecraft.banner.half_vertical_right.gray": "grey purr pale inverted", + "block.minecraft.banner.half_vertical_right.green": "green purr pale inverted", + "block.minecraft.banner.half_vertical_right.light_blue": "lightish blu purr pale inverted", + "block.minecraft.banner.half_vertical_right.light_gray": "lighish grey purr pale inverted", + "block.minecraft.banner.half_vertical_right.lime": "lime purr pale inverted", + "block.minecraft.banner.half_vertical_right.magenta": "majenta purr pale inverted", + "block.minecraft.banner.half_vertical_right.orange": "orange purr pale inverted", + "block.minecraft.banner.half_vertical_right.pink": "pink purr pale inverted", + "block.minecraft.banner.half_vertical_right.purple": "purrrppple purr pale inverted", + "block.minecraft.banner.half_vertical_right.red": "red purr pale inverted", + "block.minecraft.banner.half_vertical_right.white": "colorless purr pale inverted", + "block.minecraft.banner.half_vertical_right.yellow": "yellow purr pale inverted", + "block.minecraft.banner.mojang.black": "Blak thng", + "block.minecraft.banner.mojang.blue": "Bloo thng", + "block.minecraft.banner.mojang.brown": "Broun thng", + "block.minecraft.banner.mojang.cyan": "Nyan thng", + "block.minecraft.banner.mojang.gray": "Grey thng", + "block.minecraft.banner.mojang.green": "Grean thng", + "block.minecraft.banner.mojang.light_blue": "Lite bloo thng", + "block.minecraft.banner.mojang.light_gray": "Lite Grey thng", + "block.minecraft.banner.mojang.lime": "Lyme thng", + "block.minecraft.banner.mojang.magenta": "Majenta thng", + "block.minecraft.banner.mojang.orange": "Ornge thng", + "block.minecraft.banner.mojang.pink": "Pig-colored thing", + "block.minecraft.banner.mojang.purple": "Purpal thng", + "block.minecraft.banner.mojang.red": "Redz thng", + "block.minecraft.banner.mojang.white": "Wite thng", + "block.minecraft.banner.mojang.yellow": "Yello thng", + "block.minecraft.banner.piglin.black": "Blak noze", + "block.minecraft.banner.piglin.blue": "Blu nouze", + "block.minecraft.banner.piglin.brown": "Brown noze", + "block.minecraft.banner.piglin.cyan": "Nyan noze", + "block.minecraft.banner.piglin.gray": "Gray noze", + "block.minecraft.banner.piglin.green": "Green noze", + "block.minecraft.banner.piglin.light_blue": "Lite bluu nouze", + "block.minecraft.banner.piglin.light_gray": "Lite gray noze", + "block.minecraft.banner.piglin.lime": "Limy nose", + "block.minecraft.banner.piglin.magenta": "Magenta nouze", + "block.minecraft.banner.piglin.orange": "Oreng noze", + "block.minecraft.banner.piglin.pink": "Pinku noze", + "block.minecraft.banner.piglin.purple": "Purrpl noze", + "block.minecraft.banner.piglin.red": "Redz noze", + "block.minecraft.banner.piglin.white": "Wite noze", + "block.minecraft.banner.piglin.yellow": "Yelo Noz", + "block.minecraft.banner.rhombus.black": "blak losng", + "block.minecraft.banner.rhombus.blue": "Blu losung", + "block.minecraft.banner.rhombus.brown": "broun lozeng", + "block.minecraft.banner.rhombus.cyan": "cian lozene", + "block.minecraft.banner.rhombus.gray": "grey lozunj", + "block.minecraft.banner.rhombus.green": "greyn lozinge", + "block.minecraft.banner.rhombus.light_blue": "lit blu lozenge", + "block.minecraft.banner.rhombus.light_gray": "lite gruy losinge", + "block.minecraft.banner.rhombus.lime": "lym LOLzenge", + "block.minecraft.banner.rhombus.magenta": "majina lizange", + "block.minecraft.banner.rhombus.orange": "urang lizangee", + "block.minecraft.banner.rhombus.pink": "Pinc Loseng", + "block.minecraft.banner.rhombus.purple": "pupell losenge", + "block.minecraft.banner.rhombus.red": "Rud lozanj", + "block.minecraft.banner.rhombus.white": "wyte lozunge", + "block.minecraft.banner.rhombus.yellow": "yullo lozunge", + "block.minecraft.banner.skull.black": "Blac Scul Charg", + "block.minecraft.banner.skull.blue": "Bloo Scul Charg", + "block.minecraft.banner.skull.brown": "Broun Scul Charg", + "block.minecraft.banner.skull.cyan": "Sighan Scul Charg", + "block.minecraft.banner.skull.gray": "Gra Scul Charg", + "block.minecraft.banner.skull.green": "Gren Scul Charg", + "block.minecraft.banner.skull.light_blue": "Lite Bloo Scul Charg", + "block.minecraft.banner.skull.light_gray": "Lite Gra Scul Charg", + "block.minecraft.banner.skull.lime": "Liem Scul Charg", + "block.minecraft.banner.skull.magenta": "Majentaa Scul Charg", + "block.minecraft.banner.skull.orange": "Orang Scul Charg", + "block.minecraft.banner.skull.pink": "Pinc Scul Charg", + "block.minecraft.banner.skull.purple": "Purrrpl Scul Charg", + "block.minecraft.banner.skull.red": "rad SKULLZ charg", + "block.minecraft.banner.skull.white": "Wite Scul Charg", + "block.minecraft.banner.skull.yellow": "Yelo Scul Charg", + "block.minecraft.banner.small_stripes.black": "Blak Palee", + "block.minecraft.banner.small_stripes.blue": "Bluu Palee", + "block.minecraft.banner.small_stripes.brown": "Brawn Palee", + "block.minecraft.banner.small_stripes.cyan": "CyN Palee", + "block.minecraft.banner.small_stripes.gray": "Grey Palee", + "block.minecraft.banner.small_stripes.green": "Gre-n Palee", + "block.minecraft.banner.small_stripes.light_blue": "Lite Bloo Palee", + "block.minecraft.banner.small_stripes.light_gray": "Light Grey Palee", + "block.minecraft.banner.small_stripes.lime": "Limeh Palee", + "block.minecraft.banner.small_stripes.magenta": "Mujentaa Palee", + "block.minecraft.banner.small_stripes.orange": "Ornge Palee", + "block.minecraft.banner.small_stripes.pink": "Pinky Palee", + "block.minecraft.banner.small_stripes.purple": "PurpL Palee", + "block.minecraft.banner.small_stripes.red": "Red Palee", + "block.minecraft.banner.small_stripes.white": "Wyt Palee", + "block.minecraft.banner.small_stripes.yellow": "Yelo Palee", + "block.minecraft.banner.square_bottom_left.black": "Black Base Dextr Canton", + "block.minecraft.banner.square_bottom_left.blue": "bluz bais lepht skuair", + "block.minecraft.banner.square_bottom_left.brown": "browzn bais lepht skuair", + "block.minecraft.banner.square_bottom_left.cyan": "sian bais lepht skuair", + "block.minecraft.banner.square_bottom_left.gray": "grae bais lepht skuair", + "block.minecraft.banner.square_bottom_left.green": "Green Base Dextr Canton", + "block.minecraft.banner.square_bottom_left.light_blue": "lite blu bais lepht skuair", + "block.minecraft.banner.square_bottom_left.light_gray": "lite grae bais lepht skuair", + "block.minecraft.banner.square_bottom_left.lime": "laim bais lepht skuair", + "block.minecraft.banner.square_bottom_left.magenta": "majnta bais lepht skuair", + "block.minecraft.banner.square_bottom_left.orange": "oranj bais lepht skuair", + "block.minecraft.banner.square_bottom_left.pink": "pinkz bais lepht skuair", + "block.minecraft.banner.square_bottom_left.purple": "purpul bais lepht skuair", + "block.minecraft.banner.square_bottom_left.red": "Red Base Dextr Canton", + "block.minecraft.banner.square_bottom_left.white": "wiit bais lepht skuair", + "block.minecraft.banner.square_bottom_left.yellow": "yeloe bais lepht skuair", + "block.minecraft.banner.square_bottom_right.black": "blak bais rite skuair", + "block.minecraft.banner.square_bottom_right.blue": "blu bais rite skuair", + "block.minecraft.banner.square_bottom_right.brown": "braun bais rite skuair", + "block.minecraft.banner.square_bottom_right.cyan": "sian bais rite skuair", + "block.minecraft.banner.square_bottom_right.gray": "grai bais rite skuair", + "block.minecraft.banner.square_bottom_right.green": "grin bais rite skuair", + "block.minecraft.banner.square_bottom_right.light_blue": "lite blu bais rite skuair", + "block.minecraft.banner.square_bottom_right.light_gray": "lite grai bais rite skuair", + "block.minecraft.banner.square_bottom_right.lime": "laim bais rite skuair", + "block.minecraft.banner.square_bottom_right.magenta": "majnta bais rite skuair", + "block.minecraft.banner.square_bottom_right.orange": "oraje bais rite skuair", + "block.minecraft.banner.square_bottom_right.pink": "pinck bais rite skuair", + "block.minecraft.banner.square_bottom_right.purple": "purpul bais rite skuair", + "block.minecraft.banner.square_bottom_right.red": "red bais rite skuair", + "block.minecraft.banner.square_bottom_right.white": "White baze sinistor kattun", + "block.minecraft.banner.square_bottom_right.yellow": "yelloe bais rite skuair", + "block.minecraft.banner.square_top_left.black": "blak cheef dextor kattun", + "block.minecraft.banner.square_top_left.blue": "blooh cheef dextor cantun", + "block.minecraft.banner.square_top_left.brown": "broawn cheef dextor kattun", + "block.minecraft.banner.square_top_left.cyan": "cian cheef dextor cantun", + "block.minecraft.banner.square_top_left.gray": "greh cheef dextor cantun", + "block.minecraft.banner.square_top_left.green": "grein cheef dextor kattun", + "block.minecraft.banner.square_top_left.light_blue": "liat blooh cheef dextor cantun", + "block.minecraft.banner.square_top_left.light_gray": "liat greh cheef dextor cantun", + "block.minecraft.banner.square_top_left.lime": "liame cheef dextor cantun", + "block.minecraft.banner.square_top_left.magenta": "magentorh cheef dextor cantun", + "block.minecraft.banner.square_top_left.orange": "oringe cheef dextor cantun", + "block.minecraft.banner.square_top_left.pink": "piank cheef dextor cantun", + "block.minecraft.banner.square_top_left.purple": "perpol cheef dextor cantun", + "block.minecraft.banner.square_top_left.red": "red cheef dextor kattun", + "block.minecraft.banner.square_top_left.white": "white cheef dextor cantun", + "block.minecraft.banner.square_top_left.yellow": "yelow cheef dextor cantun", + "block.minecraft.banner.square_top_right.black": "black cheef sinistor cantun", + "block.minecraft.banner.square_top_right.blue": "blooh cheef sinistor cantun", + "block.minecraft.banner.square_top_right.brown": "broawn cheef sinistor cantun", + "block.minecraft.banner.square_top_right.cyan": "cian cheef sinistor cantun", + "block.minecraft.banner.square_top_right.gray": "greyh cheef sinistor cantun", + "block.minecraft.banner.square_top_right.green": "grein cheef sinistor cantun", + "block.minecraft.banner.square_top_right.light_blue": "liat bloo cheef sinistor cantun", + "block.minecraft.banner.square_top_right.light_gray": "liat greyh cheef sinistor cantun", + "block.minecraft.banner.square_top_right.lime": "liame cheef sinistor cantun", + "block.minecraft.banner.square_top_right.magenta": "magentorh cheef sinistor cantun", + "block.minecraft.banner.square_top_right.orange": "oringe cheef sinistor cantun", + "block.minecraft.banner.square_top_right.pink": "piank cheef sinistor cantun", + "block.minecraft.banner.square_top_right.purple": "perpol cheef sinistor cantun", + "block.minecraft.banner.square_top_right.red": "red cheef sinistor cantun", + "block.minecraft.banner.square_top_right.white": "white cheef sinistor cantun", + "block.minecraft.banner.square_top_right.yellow": "yelow cheef sinistor cantun", + "block.minecraft.banner.straight_cross.black": "Blk Croz", + "block.minecraft.banner.straight_cross.blue": "Bleu Croz", + "block.minecraft.banner.straight_cross.brown": "Brawn Croz", + "block.minecraft.banner.straight_cross.cyan": "Nyan Croz", + "block.minecraft.banner.straight_cross.gray": "Grai Croz", + "block.minecraft.banner.straight_cross.green": "Grean Croz", + "block.minecraft.banner.straight_cross.light_blue": "Zero Bleu Croz", + "block.minecraft.banner.straight_cross.light_gray": "Zero Grai Croz", + "block.minecraft.banner.straight_cross.lime": "Lame Croz", + "block.minecraft.banner.straight_cross.magenta": "Magnet Croz", + "block.minecraft.banner.straight_cross.orange": "Orang-Utan Croz", + "block.minecraft.banner.straight_cross.pink": "Pink Panther Croz", + "block.minecraft.banner.straight_cross.purple": "Poople Croz", + "block.minecraft.banner.straight_cross.red": "Read Croz", + "block.minecraft.banner.straight_cross.white": "No Color Croz", + "block.minecraft.banner.straight_cross.yellow": "Hello Yellow Croz", + "block.minecraft.banner.stripe_bottom.black": "Blak Baze", + "block.minecraft.banner.stripe_bottom.blue": "Bloo Baze", + "block.minecraft.banner.stripe_bottom.brown": "Brwn Baze", + "block.minecraft.banner.stripe_bottom.cyan": "Nyan Baze", + "block.minecraft.banner.stripe_bottom.gray": "Gray Baze", + "block.minecraft.banner.stripe_bottom.green": "Gren Baze", + "block.minecraft.banner.stripe_bottom.light_blue": "Lite Bloo Baze", + "block.minecraft.banner.stripe_bottom.light_gray": "Lite Gray Baze", + "block.minecraft.banner.stripe_bottom.lime": "Liem Baze", + "block.minecraft.banner.stripe_bottom.magenta": "Majenta Baze", + "block.minecraft.banner.stripe_bottom.orange": "Orang Baze", + "block.minecraft.banner.stripe_bottom.pink": "Pinc Baze", + "block.minecraft.banner.stripe_bottom.purple": "Purpal Baze", + "block.minecraft.banner.stripe_bottom.red": "Red Baze", + "block.minecraft.banner.stripe_bottom.white": "Wite Baze", + "block.minecraft.banner.stripe_bottom.yellow": "Yello Baze", + "block.minecraft.banner.stripe_center.black": "Blak Pal", + "block.minecraft.banner.stripe_center.blue": "Bloo Pal", + "block.minecraft.banner.stripe_center.brown": "Brwn Pal", + "block.minecraft.banner.stripe_center.cyan": "Sigh-an Pal", + "block.minecraft.banner.stripe_center.gray": "Gra Pal", + "block.minecraft.banner.stripe_center.green": "Gren Pal", + "block.minecraft.banner.stripe_center.light_blue": "Lite Bloo Pal", + "block.minecraft.banner.stripe_center.light_gray": "Lite Gra Pal", + "block.minecraft.banner.stripe_center.lime": "Liem Pal", + "block.minecraft.banner.stripe_center.magenta": "Majentaa Pal", + "block.minecraft.banner.stripe_center.orange": "Ornge Pal", + "block.minecraft.banner.stripe_center.pink": "Pinc Pal", + "block.minecraft.banner.stripe_center.purple": "Purrrrrrple Pal", + "block.minecraft.banner.stripe_center.red": "Red Pal\n", + "block.minecraft.banner.stripe_center.white": "Wite Pal", + "block.minecraft.banner.stripe_center.yellow": "Ylw Pal", + "block.minecraft.banner.stripe_downleft.black": "Bluk Vend Sinizturr", + "block.minecraft.banner.stripe_downleft.blue": "Bluu Bend SinistR", + "block.minecraft.banner.stripe_downleft.brown": "Brahwn Bend SinistR", + "block.minecraft.banner.stripe_downleft.cyan": "CyN Bend SinistR", + "block.minecraft.banner.stripe_downleft.gray": "Grey Bend SinistR", + "block.minecraft.banner.stripe_downleft.green": "Gren Bent Siniste", + "block.minecraft.banner.stripe_downleft.light_blue": "Light Bluu Bend SinistR", + "block.minecraft.banner.stripe_downleft.light_gray": "Light Grey Bend SinistR", + "block.minecraft.banner.stripe_downleft.lime": "Limeh Bend SinistR", + "block.minecraft.banner.stripe_downleft.magenta": "Magentah Bend SinistR", + "block.minecraft.banner.stripe_downleft.orange": "Oreng Bend SinistR", + "block.minecraft.banner.stripe_downleft.pink": "Pink Bend SinistR", + "block.minecraft.banner.stripe_downleft.purple": "PurpL Bend SinistR", + "block.minecraft.banner.stripe_downleft.red": "Reed Baend Sinistier", + "block.minecraft.banner.stripe_downleft.white": "Wite Bend SinistR", + "block.minecraft.banner.stripe_downleft.yellow": "Yolo-w Bend SinistR", + "block.minecraft.banner.stripe_downright.black": "darrk dawn line", + "block.minecraft.banner.stripe_downright.blue": "Bloo Bend", + "block.minecraft.banner.stripe_downright.brown": "bruwn side line", + "block.minecraft.banner.stripe_downright.cyan": "greeen bleu side line", + "block.minecraft.banner.stripe_downright.gray": "greay side line", + "block.minecraft.banner.stripe_downright.green": "greeen side line", + "block.minecraft.banner.stripe_downright.light_blue": "Teh lite blu bend", + "block.minecraft.banner.stripe_downright.light_gray": "wite greay side line", + "block.minecraft.banner.stripe_downright.lime": "brite greeen side line", + "block.minecraft.banner.stripe_downright.magenta": "Teh Magentra Bend", + "block.minecraft.banner.stripe_downright.orange": "orng bend", + "block.minecraft.banner.stripe_downright.pink": "peenk side line", + "block.minecraft.banner.stripe_downright.purple": "Purrrrple Bend", + "block.minecraft.banner.stripe_downright.red": "red dawn line", + "block.minecraft.banner.stripe_downright.white": "Whit Bund", + "block.minecraft.banner.stripe_downright.yellow": "yelaw side line", + "block.minecraft.banner.stripe_left.black": "blak pail deztr", + "block.minecraft.banner.stripe_left.blue": "blu pail deztr", + "block.minecraft.banner.stripe_left.brown": "braun pail deztr", + "block.minecraft.banner.stripe_left.cyan": "sian pail deztr", + "block.minecraft.banner.stripe_left.gray": "grei pail deztr", + "block.minecraft.banner.stripe_left.green": "grin pail deztr", + "block.minecraft.banner.stripe_left.light_blue": "Lite Bleu Pail Dextr", + "block.minecraft.banner.stripe_left.light_gray": "lite grei pail deztr", + "block.minecraft.banner.stripe_left.lime": "laim pail deztr", + "block.minecraft.banner.stripe_left.magenta": "Maginta Pail Dextr", + "block.minecraft.banner.stripe_left.orange": "Orenge Pail Dextr", + "block.minecraft.banner.stripe_left.pink": "pinck pail deztr", + "block.minecraft.banner.stripe_left.purple": "purpl pail deztr", + "block.minecraft.banner.stripe_left.red": "rad pail deztr", + "block.minecraft.banner.stripe_left.white": "Wite Pail Dextr", + "block.minecraft.banner.stripe_left.yellow": "Yello Pail Dextr", + "block.minecraft.banner.stripe_middle.black": "Blak Fezz", + "block.minecraft.banner.stripe_middle.blue": "Bloo Fezz", + "block.minecraft.banner.stripe_middle.brown": "Brwn Fezz", + "block.minecraft.banner.stripe_middle.cyan": "Sigh-an Fezz", + "block.minecraft.banner.stripe_middle.gray": "Gray Fezz", + "block.minecraft.banner.stripe_middle.green": "Gren Fezz", + "block.minecraft.banner.stripe_middle.light_blue": "Late Bluu Fezz", + "block.minecraft.banner.stripe_middle.light_gray": "Lite Gray Fezz", + "block.minecraft.banner.stripe_middle.lime": "Lame Fezz", + "block.minecraft.banner.stripe_middle.magenta": "purpl-ey Fezz", + "block.minecraft.banner.stripe_middle.orange": "oranj dawn Fezz", + "block.minecraft.banner.stripe_middle.pink": "Pinc Fezz", + "block.minecraft.banner.stripe_middle.purple": "Purrrrple Fezz", + "block.minecraft.banner.stripe_middle.red": "Red Fezz", + "block.minecraft.banner.stripe_middle.white": "blanck dawn Fezz", + "block.minecraft.banner.stripe_middle.yellow": "Yellau Fezz", + "block.minecraft.banner.stripe_right.black": "Blak Peil Sinizter", + "block.minecraft.banner.stripe_right.blue": "Bluu Peil Sinizter", + "block.minecraft.banner.stripe_right.brown": "Braun Peil Sinizter", + "block.minecraft.banner.stripe_right.cyan": "Cya Peil Sinizter", + "block.minecraft.banner.stripe_right.gray": "Grayz Peil Sinizter", + "block.minecraft.banner.stripe_right.green": "Gren Peil Sinizter", + "block.minecraft.banner.stripe_right.light_blue": "Late Bluu Peil Sinizter", + "block.minecraft.banner.stripe_right.light_gray": "Light Grayz Peil Sinizter", + "block.minecraft.banner.stripe_right.lime": "Lame Peil Sinizter", + "block.minecraft.banner.stripe_right.magenta": "Meigent Peil Sinizter", + "block.minecraft.banner.stripe_right.orange": "Oreng Peil Sinizter", + "block.minecraft.banner.stripe_right.pink": "Pink Peil Sinizter", + "block.minecraft.banner.stripe_right.purple": "Purpl Peil Sinizter", + "block.minecraft.banner.stripe_right.red": "Red Peil Sinizter", + "block.minecraft.banner.stripe_right.white": "Wait Peil Sinizter", + "block.minecraft.banner.stripe_right.yellow": "Yellau Peil Sinizter", + "block.minecraft.banner.stripe_top.black": "Blak Chif", + "block.minecraft.banner.stripe_top.blue": "Bloo Chif", + "block.minecraft.banner.stripe_top.brown": "Brwn Chif", + "block.minecraft.banner.stripe_top.cyan": "Nyan Chif", + "block.minecraft.banner.stripe_top.gray": "Gray Chif", + "block.minecraft.banner.stripe_top.green": "Gren Chif", + "block.minecraft.banner.stripe_top.light_blue": "Lite Bloo Chif", + "block.minecraft.banner.stripe_top.light_gray": "Lite Gray Chif", + "block.minecraft.banner.stripe_top.lime": "Liem Chif", + "block.minecraft.banner.stripe_top.magenta": "Majenta Chif", + "block.minecraft.banner.stripe_top.orange": "Orang Chif", + "block.minecraft.banner.stripe_top.pink": "Pinc Chif", + "block.minecraft.banner.stripe_top.purple": "Parpal Chif", + "block.minecraft.banner.stripe_top.red": "Redish Chif", + "block.minecraft.banner.stripe_top.white": "Wite Chif", + "block.minecraft.banner.stripe_top.yellow": "Yello Chif", + "block.minecraft.banner.triangle_bottom.black": "Dark Chevronz", + "block.minecraft.banner.triangle_bottom.blue": "Blu Chevronz", + "block.minecraft.banner.triangle_bottom.brown": "Brown Chevronz", + "block.minecraft.banner.triangle_bottom.cyan": "Sighan Shevrun", + "block.minecraft.banner.triangle_bottom.gray": "GREY SHEVRON", + "block.minecraft.banner.triangle_bottom.green": "Green Chevronz", + "block.minecraft.banner.triangle_bottom.light_blue": "Lite Bloo Shevrun", + "block.minecraft.banner.triangle_bottom.light_gray": "VERY LITE GREY SHEVRON", + "block.minecraft.banner.triangle_bottom.lime": "Liem Shevrun", + "block.minecraft.banner.triangle_bottom.magenta": "Majentaa Shevrun", + "block.minecraft.banner.triangle_bottom.orange": "Orung Shevrun", + "block.minecraft.banner.triangle_bottom.pink": "PIINK SHEVRON", + "block.minecraft.banner.triangle_bottom.purple": "PRPLZ CHVRN", + "block.minecraft.banner.triangle_bottom.red": "Red Chevronz", + "block.minecraft.banner.triangle_bottom.white": "Wite Shevrun", + "block.minecraft.banner.triangle_bottom.yellow": "Yelo Shevrun", + "block.minecraft.banner.triangle_top.black": "blakc upsied v", + "block.minecraft.banner.triangle_top.blue": "blew upsied v", + "block.minecraft.banner.triangle_top.brown": "broun upsied v", + "block.minecraft.banner.triangle_top.cyan": "bleuy upsied v", + "block.minecraft.banner.triangle_top.gray": "grey upsied v", + "block.minecraft.banner.triangle_top.green": "grn upsied v", + "block.minecraft.banner.triangle_top.light_blue": "lite blew upsied v", + "block.minecraft.banner.triangle_top.light_gray": "lite grey upsied v", + "block.minecraft.banner.triangle_top.lime": "liem upsied v", + "block.minecraft.banner.triangle_top.magenta": "puerple upsied v", + "block.minecraft.banner.triangle_top.orange": "orangue upsied v", + "block.minecraft.banner.triangle_top.pink": "pienk upsied v", + "block.minecraft.banner.triangle_top.purple": "purrple upsied v", + "block.minecraft.banner.triangle_top.red": "ryd upsied v", + "block.minecraft.banner.triangle_top.white": "whiet upsied v", + "block.minecraft.banner.triangle_top.yellow": "yelou upsied v", + "block.minecraft.banner.triangles_bottom.black": "bleck bottum indiented", + "block.minecraft.banner.triangles_bottom.blue": "bleu bottum indiented", + "block.minecraft.banner.triangles_bottom.brown": "broun bottum indiented", + "block.minecraft.banner.triangles_bottom.cyan": "cian bottum indiented", + "block.minecraft.banner.triangles_bottom.gray": "grey bottum indiented", + "block.minecraft.banner.triangles_bottom.green": "greun bottum indiented", + "block.minecraft.banner.triangles_bottom.light_blue": "lite bleu bottum indiented", + "block.minecraft.banner.triangles_bottom.light_gray": "lite grey bottum indiented", + "block.minecraft.banner.triangles_bottom.lime": "liem bottum indiented", + "block.minecraft.banner.triangles_bottom.magenta": "prple bottum indiented", + "block.minecraft.banner.triangles_bottom.orange": "oraynge bottum indiented", + "block.minecraft.banner.triangles_bottom.pink": "pienk bottum indiented", + "block.minecraft.banner.triangles_bottom.purple": "pyrple bottum indiented", + "block.minecraft.banner.triangles_bottom.red": "read bottum indiented", + "block.minecraft.banner.triangles_bottom.white": "whiet bottum indiented", + "block.minecraft.banner.triangles_bottom.yellow": "YELLOU BASS INDEZTED", + "block.minecraft.banner.triangles_top.black": "BLAWK CHEEF INDEZTED", + "block.minecraft.banner.triangles_top.blue": "Bwue Cheef Indentd", + "block.minecraft.banner.triangles_top.brown": "Bwown Cheef Indentd", + "block.minecraft.banner.triangles_top.cyan": "Cian Cheef Indentd", + "block.minecraft.banner.triangles_top.gray": "Gray Cheef Indentd", + "block.minecraft.banner.triangles_top.green": "Gween Cheef Indentd", + "block.minecraft.banner.triangles_top.light_blue": "Lite Blu Cheef Indentd", + "block.minecraft.banner.triangles_top.light_gray": "Lit gray Cheef Indentd", + "block.minecraft.banner.triangles_top.lime": "Laim Cheef Indentd", + "block.minecraft.banner.triangles_top.magenta": "Mahgehntah Cheef Indentd", + "block.minecraft.banner.triangles_top.orange": "Ohrang Cheef Indentd", + "block.minecraft.banner.triangles_top.pink": "Pnik Cheef Indentd", + "block.minecraft.banner.triangles_top.purple": "Purrrple Cheef Indentd", + "block.minecraft.banner.triangles_top.red": "Red Cheef Indentd", + "block.minecraft.banner.triangles_top.white": "Wuhite Cheef Indentd", + "block.minecraft.banner.triangles_top.yellow": "Yallo Cheef Indentd", + "block.minecraft.barrel": "Fish box", + "block.minecraft.barrier": "You shall not pass", + "block.minecraft.basalt": "Bawzult", + "block.minecraft.beacon": "Bacon", + "block.minecraft.beacon.primary": "Primari Pahwer", + "block.minecraft.beacon.secondary": "Secondari Pahwer", + "block.minecraft.bed.no_sleep": "U can shleep onwy at nite and duwin thundewstuwms", + "block.minecraft.bed.not_safe": "U do not haf tu rezt nao; der are monztahrs nirby", + "block.minecraft.bed.obstructed": "Dis bed iz obstructd", + "block.minecraft.bed.occupied": "Sumone stole ur bed!", + "block.minecraft.bed.too_far_away": "U do not haf tu rezt nao; da bed is TOO FAR awey", + "block.minecraft.bedrock": "TROL BLUKZ", + "block.minecraft.bee_nest": "B nest", + "block.minecraft.beehive": "Beez's place", + "block.minecraft.beetroots": "Red Juicy Undrgrawnd Plant", + "block.minecraft.bell": "Belly", + "block.minecraft.big_dripleaf": "Big fall thru plantt", + "block.minecraft.big_dripleaf_stem": "Big fall thru plantt stehm", + "block.minecraft.birch_button": "Burch Button", + "block.minecraft.birch_door": "Birtch Dor", + "block.minecraft.birch_fence": "BIRCH SCRATCHEZPOST", + "block.minecraft.birch_fence_gate": "BURCH GAIT", + "block.minecraft.birch_leaves": "birch salad", + "block.minecraft.birch_log": "lite woodezn lawg", + "block.minecraft.birch_planks": "lite woodezn blox", + "block.minecraft.birch_pressure_plate": "Burch Prseure Pleitz", + "block.minecraft.birch_sapling": "baby burch", + "block.minecraft.birch_sign": "Burchs Sign", + "block.minecraft.birch_slab": "Burch Sleb", + "block.minecraft.birch_stairs": "Burch Stairz", + "block.minecraft.birch_trapdoor": "Burch Trap", + "block.minecraft.birch_wall_sign": "Burchs Sign on ur wall", + "block.minecraft.birch_wood": "Birtch Wuud", + "block.minecraft.black_banner": "blakc bahnor", + "block.minecraft.black_bed": "Blak Bed", + "block.minecraft.black_candle": "Blak land pikl", + "block.minecraft.black_candle_cake": "Caek wif Blak Candl", + "block.minecraft.black_carpet": "Black Cat Rug", + "block.minecraft.black_concrete": "Blek tough bluk", + "block.minecraft.black_concrete_powder": "Blak tough bluk powdr", + "block.minecraft.black_glazed_terracotta": "Blek mosaic", + "block.minecraft.black_shulker_box": "Black Shulker Bux", + "block.minecraft.black_stained_glass": "Blak Staind Glas", + "block.minecraft.black_stained_glass_pane": "blerk thin culurd thingy", + "block.minecraft.black_terracotta": "Blak Teracottah", + "block.minecraft.black_wool": "Black Fur Bluk", + "block.minecraft.blackstone": "Blecston", + "block.minecraft.blackstone_slab": "bleckston sleb", + "block.minecraft.blackstone_stairs": "bleck rock stairz", + "block.minecraft.blackstone_wall": "bleckston wal", + "block.minecraft.blast_furnace": "BlAsT FuRnAcE", + "block.minecraft.blue_banner": "bloo bahnor", + "block.minecraft.blue_bed": "Bloo Bed", + "block.minecraft.blue_candle": "Bloo hot stik", + "block.minecraft.blue_candle_cake": "Caek wif Bloo Land pikl", + "block.minecraft.blue_carpet": "Bloo Cat Rug", + "block.minecraft.blue_concrete": "Bluu tough bluk", + "block.minecraft.blue_concrete_powder": "Bluu tough bluk powdr", + "block.minecraft.blue_glazed_terracotta": "Bluu mosaic", + "block.minecraft.blue_ice": "Big blu", + "block.minecraft.blue_orchid": "pretteh bloo flowr", + "block.minecraft.blue_shulker_box": "Bloo Shulker Bux", + "block.minecraft.blue_stained_glass": "Waterly Stained Glazz", + "block.minecraft.blue_stained_glass_pane": "Bloo Staned Glas Pan", + "block.minecraft.blue_terracotta": "Bloo Terrakattah", + "block.minecraft.blue_wool": "Bloo Fur Bluk", + "block.minecraft.bone_block": "Compresd bone", + "block.minecraft.bookshelf": "bed 4 bookz", + "block.minecraft.brain_coral": "Brein koral", + "block.minecraft.brain_coral_block": "Brein koral cube", + "block.minecraft.brain_coral_fan": "Brein koral fen", + "block.minecraft.brain_coral_wall_fan": "Braen Corel Wahll Fan", + "block.minecraft.brewing_stand": "Bubbleh", + "block.minecraft.brick_slab": "Brik Sleb", + "block.minecraft.brick_stairs": "Brik stairez", + "block.minecraft.brick_wall": "Brik Wal", + "block.minecraft.bricks": "brickz", + "block.minecraft.brown_banner": "broun bahnor", + "block.minecraft.brown_bed": "Brownish Bed", + "block.minecraft.brown_candle": "Brwn land pikl", + "block.minecraft.brown_candle_cake": "Caek wif Brown Candl", + "block.minecraft.brown_carpet": "Brownish Cat Rug", + "block.minecraft.brown_concrete": "Brownish tough bluk", + "block.minecraft.brown_concrete_powder": "Brownish tough bluk powdr", + "block.minecraft.brown_glazed_terracotta": "Brownish mosaic", + "block.minecraft.brown_mushroom": "brwn Mushroom", + "block.minecraft.brown_mushroom_block": "brwn Mushroom Blok", + "block.minecraft.brown_shulker_box": "Brownish Shulker Bux", + "block.minecraft.brown_stained_glass": "Brownly Stainedly Glazz", + "block.minecraft.brown_stained_glass_pane": "Broun Staned Glas Pan", + "block.minecraft.brown_terracotta": "Brewn Terrakattah", + "block.minecraft.brown_wool": "Brownish Fur Bluk", + "block.minecraft.bubble_column": "babul kolum", + "block.minecraft.bubble_coral": "Bubol koral", + "block.minecraft.bubble_coral_block": "Bubol koral cube", + "block.minecraft.bubble_coral_fan": "Bubol koral fen", + "block.minecraft.bubble_coral_wall_fan": "Bable koral wull fan", + "block.minecraft.budding_amethyst": "Purpur shinee makr", + "block.minecraft.cactus": "Spiky Green Plant", + "block.minecraft.cake": "liez", + "block.minecraft.calcite": "Wite rok", + "block.minecraft.campfire": "Campfireh", + "block.minecraft.candle": "Land pikl", + "block.minecraft.candle_cake": "lie wif hot stix", + "block.minecraft.carrots": "Jumpin Foodz Foodz", + "block.minecraft.cartography_table": "Cartogrophy Table", + "block.minecraft.carved_pumpkin": "Karvd Pumpkin", + "block.minecraft.cauldron": "Rly big pot", + "block.minecraft.cave_air": "air of spOoOky cavess", + "block.minecraft.cave_vines": "Caev wiskrs", + "block.minecraft.cave_vines_plant": "Shinin' Viine Plantta o' Caevs", + "block.minecraft.chain": "Shain", + "block.minecraft.chain_command_block": "Alpha Block Dat Duz A Congo Line With Other Alpha Blocks", + "block.minecraft.chest": "Cat Box", + "block.minecraft.chipped_anvil": "Oh so much chipped anvehl", + "block.minecraft.chiseled_deepslate": "chizeled dark ston", + "block.minecraft.chiseled_nether_bricks": "Chizald nether brickz", + "block.minecraft.chiseled_polished_blackstone": "chizald shiny blak rok", + "block.minecraft.chiseled_quartz_block": "Chizald Kworts Blak", + "block.minecraft.chiseled_red_sandstone": "Chizald warmy sanstown", + "block.minecraft.chiseled_sandstone": "carved litter box rockz", + "block.minecraft.chiseled_stone_bricks": "Stacked Rockz en an Patternz", + "block.minecraft.chorus_flower": "Meow flawur", + "block.minecraft.chorus_plant": "Meow Plantz", + "block.minecraft.clay": "CLAE", + "block.minecraft.coal_block": "Koala", + "block.minecraft.coal_ore": "Rockz wif Coel", + "block.minecraft.coarse_dirt": "Ruff durt", + "block.minecraft.cobbled_deepslate": "coobled dark ston", + "block.minecraft.cobbled_deepslate_slab": "coobled dark ston sleb", + "block.minecraft.cobbled_deepslate_stairs": "coobled dark ston stairz", + "block.minecraft.cobbled_deepslate_wall": "coobled dark ston wal", + "block.minecraft.cobblestone": "Cooblestoneh", + "block.minecraft.cobblestone_slab": "small pebble blok", + "block.minecraft.cobblestone_stairs": "rok stairz", + "block.minecraft.cobblestone_wall": "COBULSTOWN WALL", + "block.minecraft.cobweb": "icky spider webz", + "block.minecraft.cocoa": "dont feed dis to ur catz", + "block.minecraft.command_block": "Comnd Bluk", + "block.minecraft.comparator": "Redstone thingy", + "block.minecraft.composter": "Compostr", + "block.minecraft.conduit": "strange box", + "block.minecraft.copper_block": "Blok of copurr", + "block.minecraft.copper_ore": "Copurr rok", + "block.minecraft.cornflower": "Unicornflowerpower", + "block.minecraft.cracked_deepslate_bricks": "half brokn dark ston breekz", + "block.minecraft.cracked_deepslate_tiles": "half brokn dark ston tilz", + "block.minecraft.cracked_nether_bricks": "Craked nether brickz", + "block.minecraft.cracked_polished_blackstone_bricks": "craked polised bleck briks", + "block.minecraft.cracked_stone_bricks": "Stacked Pebblez", + "block.minecraft.crafting_table": "Krafting Tabal", + "block.minecraft.creeper_head": "Creeper Hed", + "block.minecraft.creeper_wall_head": "Creeper Wall Hed", + "block.minecraft.crimson_button": "Crimzn Bawttn", + "block.minecraft.crimson_door": "Krimzn Big Kat Door", + "block.minecraft.crimson_fence": "Crimzn Fanse", + "block.minecraft.crimson_fence_gate": "Crimzn Fenc Gaet", + "block.minecraft.crimson_fungus": "Crimzn Foongis", + "block.minecraft.crimson_hyphae": "Weerd red nethar plnat", + "block.minecraft.crimson_nylium": "Crimzun Nyanium", + "block.minecraft.crimson_planks": "Crimsun planmks", + "block.minecraft.crimson_pressure_plate": "Crimson prseure Pleitz", + "block.minecraft.crimson_roots": "Crimsun roots", + "block.minecraft.crimson_sign": "Krimzn Syne", + "block.minecraft.crimson_slab": "Crimzn Sleb", + "block.minecraft.crimson_stairs": "Crimzn Staez", + "block.minecraft.crimson_stem": "Crimzn stim", + "block.minecraft.crimson_trapdoor": "Crimzn Kat Door", + "block.minecraft.crimson_wall_sign": "Red walz sign", + "block.minecraft.crying_obsidian": "sad hardest thing evar", + "block.minecraft.cut_copper": "1000\u00b0 kniv vs cuprr blok", + "block.minecraft.cut_copper_slab": "Slised copurr sleb", + "block.minecraft.cut_copper_stairs": "Slised copurr sters", + "block.minecraft.cut_red_sandstone": "Warmy red sanstown", + "block.minecraft.cut_red_sandstone_slab": "Cut warmy sansdstoen sleb", + "block.minecraft.cut_sandstone": "Warmy sanstown", + "block.minecraft.cut_sandstone_slab": "Cut sansdstoen sleb", + "block.minecraft.cyan_banner": "nyan bahnor", + "block.minecraft.cyan_bed": "Nyan Bed", + "block.minecraft.cyan_candle": "C-an land pikl", + "block.minecraft.cyan_candle_cake": "Caek wif Cyan Candle", + "block.minecraft.cyan_carpet": "Sighun Cat Rug", + "block.minecraft.cyan_concrete": "Syan tough bluk", + "block.minecraft.cyan_concrete_powder": "Syan tough bluk powdr", + "block.minecraft.cyan_glazed_terracotta": "Syan mosaic", + "block.minecraft.cyan_shulker_box": "Weird Blu Shulker Bux", + "block.minecraft.cyan_stained_glass": "Cyanled Stainely Glazz", + "block.minecraft.cyan_stained_glass_pane": "Sian Staned Glas Pan", + "block.minecraft.cyan_terracotta": "Nyan Teracottah", + "block.minecraft.cyan_wool": "Sighun Fur Bluk", + "block.minecraft.damaged_anvil": "Oh so much braken anvehl", + "block.minecraft.dandelion": "Yello Flowah", + "block.minecraft.dark_oak_button": "Blak Oke Button", + "block.minecraft.dark_oak_door": "Dark Oak Dor", + "block.minecraft.dark_oak_fence": "Drk Oak Fence", + "block.minecraft.dark_oak_fence_gate": "DARK GAIT", + "block.minecraft.dark_oak_leaves": "derk ok lefs", + "block.minecraft.dark_oak_log": "Oranj lawg", + "block.minecraft.dark_oak_planks": "Oranj Wud", + "block.minecraft.dark_oak_pressure_plate": "Dark Oke Prseure Pleitz", + "block.minecraft.dark_oak_sapling": "baby blak oak", + "block.minecraft.dark_oak_sign": "Dak Ook Sign", + "block.minecraft.dark_oak_slab": "Blak Oke Sleb", + "block.minecraft.dark_oak_stairs": "Dakwoak Stairz", + "block.minecraft.dark_oak_trapdoor": "Blak Oke Trap", + "block.minecraft.dark_oak_wall_sign": "Dak Ook Sign on ur wall", + "block.minecraft.dark_oak_wood": "Dark Oak Wuud", + "block.minecraft.dark_prismarine": "Dark Prizmarine", + "block.minecraft.dark_prismarine_slab": "Dark Prizmarine Sleb", + "block.minecraft.dark_prismarine_stairs": "Dark Prizmarine Stairz", + "block.minecraft.daylight_detector": "light eater", + "block.minecraft.dead_brain_coral": "Ded brein koral", + "block.minecraft.dead_brain_coral_block": "Ded brain koral cube", + "block.minecraft.dead_brain_coral_fan": "Ded brein koral fen", + "block.minecraft.dead_brain_coral_wall_fan": "Ded brein koral wull fan", + "block.minecraft.dead_bubble_coral": "Ded bubol koral", + "block.minecraft.dead_bubble_coral_block": "Ded bubol koral cube", + "block.minecraft.dead_bubble_coral_fan": "Ded bubol koral fen", + "block.minecraft.dead_bubble_coral_wall_fan": "Ded bable korall wull fan", + "block.minecraft.dead_bush": "Died bushez", + "block.minecraft.dead_fire_coral": "Ded HOT koral", + "block.minecraft.dead_fire_coral_block": "Ded HOT koral cube", + "block.minecraft.dead_fire_coral_fan": "Ded HOT koral fen", + "block.minecraft.dead_fire_coral_wall_fan": "Ded hot korall wull fan", + "block.minecraft.dead_horn_coral": "Ded jorn koral", + "block.minecraft.dead_horn_coral_block": "Ded jorn koral cube", + "block.minecraft.dead_horn_coral_fan": "Ded jorn koral fen", + "block.minecraft.dead_horn_coral_wall_fan": "Ded hurn korall wull fan", + "block.minecraft.dead_tube_coral": "Ded tuf koral", + "block.minecraft.dead_tube_coral_block": "Ded tuf koral cube", + "block.minecraft.dead_tube_coral_fan": "Ded tuf koral fen", + "block.minecraft.dead_tube_coral_wall_fan": "Ded tub koral wull fan", + "block.minecraft.deepslate": "dark ston", + "block.minecraft.deepslate_brick_slab": "dark ston brik sleb", + "block.minecraft.deepslate_brick_stairs": "dark ston brik stairz", + "block.minecraft.deepslate_brick_wall": "dark ston brik wal", + "block.minecraft.deepslate_bricks": "dark ston brikz", + "block.minecraft.deepslate_coal_ore": "dark ston koal or", + "block.minecraft.deepslate_copper_ore": "dark ston coppur or", + "block.minecraft.deepslate_diamond_ore": "dark ston deemond or", + "block.minecraft.deepslate_emerald_ore": "dark ston green shiny or", + "block.minecraft.deepslate_gold_ore": "dark ston gold or", + "block.minecraft.deepslate_iron_ore": "dark ston irony or", + "block.minecraft.deepslate_lapis_ore": "dark ston bloo or", + "block.minecraft.deepslate_redstone_ore": "dark ston Redstone or", + "block.minecraft.deepslate_tile_slab": "dark ston til sleb", + "block.minecraft.deepslate_tile_stairs": "dark ston til stairz", + "block.minecraft.deepslate_tile_wall": "dark ston til wal", + "block.minecraft.deepslate_tiles": "dark ston tilez", + "block.minecraft.detector_rail": "Ditektar Ral", + "block.minecraft.diamond_block": "MUCH MUNY $$$", + "block.minecraft.diamond_ore": "Rockz wif Deemond", + "block.minecraft.diorite": "kitteh litter rockz", + "block.minecraft.diorite_slab": "Diorito Sleb", + "block.minecraft.diorite_stairs": "Diorito Stairz", + "block.minecraft.diorite_wall": "Diorito Wal", + "block.minecraft.dirt": "Durt", + "block.minecraft.dirt_path": "Durt roud", + "block.minecraft.dispenser": "Dizpnzur", + "block.minecraft.dragon_egg": "Dwagon Eg", + "block.minecraft.dragon_head": "Dragun Hed", + "block.minecraft.dragon_wall_head": "Dragon Wall Hed", + "block.minecraft.dried_kelp_block": "Smoky lettuce cube", + "block.minecraft.dripstone_block": "bootleg netherite", + "block.minecraft.dropper": "DRUPPER", + "block.minecraft.emerald_block": "Shineh bloock of Green stuff", + "block.minecraft.emerald_ore": "Rockz wif Emmiez", + "block.minecraft.enchanting_table": "Kewl Tabel", + "block.minecraft.end_gateway": "Megeek purrtul", + "block.minecraft.end_portal": "Magik yarn bawl howl", + "block.minecraft.end_portal_frame": "Magik portl fraem", + "block.minecraft.end_rod": "Unikorn Horn", + "block.minecraft.end_stone": "Weird white rock", + "block.minecraft.end_stone_brick_slab": "Ston Brik Sleb of za End", + "block.minecraft.end_stone_brick_stairs": "Ston Stairz of za End", + "block.minecraft.end_stone_brick_wall": "Ston Brik Wal of za End", + "block.minecraft.end_stone_bricks": "Kat Litter Briks", + "block.minecraft.ender_chest": "Endur Chest", + "block.minecraft.exposed_copper": "EXPOSED copurr", + "block.minecraft.exposed_cut_copper": "EXPOSED cut coppurr", + "block.minecraft.exposed_cut_copper_slab": "Seen Sliced Copurr Half Block", + "block.minecraft.exposed_cut_copper_stairs": "Seen Sliced Copurr sters", + "block.minecraft.farmland": "fudholz", + "block.minecraft.fern": "furn", + "block.minecraft.fire": "fireh", + "block.minecraft.fire_coral": "HOT koral", + "block.minecraft.fire_coral_block": "HOT coral cube", + "block.minecraft.fire_coral_fan": "HOT koral fen", + "block.minecraft.fire_coral_wall_fan": "Hot koral wull fan", + "block.minecraft.fletching_table": "Fleching Tabel", + "block.minecraft.flower_pot": "container for all the pretty plantz", + "block.minecraft.flowering_azalea": "Tertl-shel-laik tree but in FLOWARZZ", + "block.minecraft.flowering_azalea_leaves": "Flowerin azalee leevez", + "block.minecraft.frogspawn": "toad ec", + "block.minecraft.frosted_ice": "Thatz kowld!", + "block.minecraft.furnace": "Hot Box", + "block.minecraft.gilded_blackstone": "Some goldid bleckston", + "block.minecraft.glass": "Glazz", + "block.minecraft.glass_pane": "Glazz Payn", + "block.minecraft.glow_lichen": "shiny moss", + "block.minecraft.glowstone": "Glowstone", + "block.minecraft.gold_block": "Shiny blok", + "block.minecraft.gold_ore": "Rockz wif Guld", + "block.minecraft.granite": "Red Rock", + "block.minecraft.granite_slab": "Red Rock Sleb", + "block.minecraft.granite_stairs": "Red Rock Stairz", + "block.minecraft.granite_wall": "Red Rock Wal", + "block.minecraft.grass": "Grazz", + "block.minecraft.grass_block": "Gras blak", + "block.minecraft.gravel": "Graval", + "block.minecraft.gray_banner": "grai bahnor", + "block.minecraft.gray_bed": "Greyh Bed", + "block.minecraft.gray_candle": "Gra hot stik", + "block.minecraft.gray_candle_cake": "Caek wif Gra Land pikl", + "block.minecraft.gray_carpet": "Gray Cat Rug", + "block.minecraft.gray_concrete": "Grey tough bluk", + "block.minecraft.gray_concrete_powder": "Grey tough bluk powdr", + "block.minecraft.gray_glazed_terracotta": "Grey mosaic", + "block.minecraft.gray_shulker_box": "Grayish Shulker Bux", + "block.minecraft.gray_stained_glass": "Grayly Stainedly Glazz", + "block.minecraft.gray_stained_glass_pane": "Gray Staned Glas Pan", + "block.minecraft.gray_terracotta": "Greyh Teracottah", + "block.minecraft.gray_wool": "Gray Fur Bluk", + "block.minecraft.green_banner": "grene bahnor", + "block.minecraft.green_bed": "Gren Bed", + "block.minecraft.green_candle": "Gren hot stik", + "block.minecraft.green_candle_cake": "Caek wif Grin Candl", + "block.minecraft.green_carpet": "Greenish Cat Rug", + "block.minecraft.green_concrete": "Gren tough bluk", + "block.minecraft.green_concrete_powder": "Gren tough bluk powdr", + "block.minecraft.green_glazed_terracotta": "Gren mosaic", + "block.minecraft.green_shulker_box": "Greenish Shulker Bux", + "block.minecraft.green_stained_glass": "Grean Stainedly Glazz", + "block.minecraft.green_stained_glass_pane": "Green Staned Glas Pan", + "block.minecraft.green_terracotta": "Gren Teracottah", + "block.minecraft.green_wool": "Greenish Fur Bluk", + "block.minecraft.grindstone": "Removezstone", + "block.minecraft.hanging_roots": "hangin stickz", + "block.minecraft.hay_block": "Stwaw bael", + "block.minecraft.heavy_weighted_pressure_plate": "hvy weited presplat plet", + "block.minecraft.honey_block": "Huny Bloc", + "block.minecraft.honeycomb_block": "B thing bloc", + "block.minecraft.hopper": "Huperr", + "block.minecraft.horn_coral": "Jorn koral", + "block.minecraft.horn_coral_block": "Jorn koral cube", + "block.minecraft.horn_coral_fan": "Jorn koral fen", + "block.minecraft.horn_coral_wall_fan": "Hurn koral wull fan", + "block.minecraft.ice": "Frozen water", + "block.minecraft.infested_chiseled_stone_bricks": "Kewl Rockz Wit Monsters", + "block.minecraft.infested_cobblestone": "Invezzted Cooblestoon", + "block.minecraft.infested_cracked_stone_bricks": "Brokin Rockz Wit Monsters", + "block.minecraft.infested_deepslate": "dark ston wit weird thing inside idk", + "block.minecraft.infested_mossy_stone_bricks": "Rockz Wit Mozs And Monsters", + "block.minecraft.infested_stone": "Invezzted Stoon ", + "block.minecraft.infested_stone_bricks": "Rockz Wit Patternz And Monsters", + "block.minecraft.iron_bars": "Jeil Bahz", + "block.minecraft.iron_block": "Blok of Irony", + "block.minecraft.iron_door": "Iron Dor", + "block.minecraft.iron_ore": "Rockz wif Irun", + "block.minecraft.iron_trapdoor": "Trappy Irun Kitty Dore", + "block.minecraft.jack_o_lantern": "Big glowy squash", + "block.minecraft.jigsaw": "Jig saw Blok", + "block.minecraft.jukebox": "Catbox", + "block.minecraft.jungle_button": "Jongle Button", + "block.minecraft.jungle_door": "Jungl Dor", + "block.minecraft.jungle_fence": "Janggal Fence", + "block.minecraft.jungle_fence_gate": "Janggal Fence Gate", + "block.minecraft.jungle_leaves": "jungel salad", + "block.minecraft.jungle_log": "Junglz wodden lawg", + "block.minecraft.jungle_planks": "Junglz wodden bloc", + "block.minecraft.jungle_pressure_plate": "Jongle Prseure Pleitz", + "block.minecraft.jungle_sapling": "baby jungel", + "block.minecraft.jungle_sign": "Junglz Sign", + "block.minecraft.jungle_slab": "Jungo Sleb", + "block.minecraft.jungle_stairs": "Junggel Stairz", + "block.minecraft.jungle_trapdoor": "Jongle Trap", + "block.minecraft.jungle_wall_sign": "Junglz Sign on ur wall", + "block.minecraft.jungle_wood": "Jungl Wuud", + "block.minecraft.kelp": "Yucky lettuce", + "block.minecraft.kelp_plant": "Yucky lettuce plant", + "block.minecraft.ladder": "Ladr", + "block.minecraft.lantern": "Lanturn", + "block.minecraft.lapis_block": "Glosy Blu Bluk", + "block.minecraft.lapis_ore": "Rockz wif Blu Stuf", + "block.minecraft.large_amethyst_bud": "Big purpur shinee", + "block.minecraft.large_fern": "Larg furn", + "block.minecraft.lava": "hot sauce", + "block.minecraft.lava_cauldron": "big bukkit wif hot sauec", + "block.minecraft.lectern": "Book readin ting", + "block.minecraft.lever": "Flipurr", + "block.minecraft.light": "Shin'", + "block.minecraft.light_blue_banner": "ligt bloo bahnor", + "block.minecraft.light_blue_bed": "Lite Blu Bed", + "block.minecraft.light_blue_candle": "Lite blu land pikl", + "block.minecraft.light_blue_candle_cake": "Caek wif Lite blu Land pikl", + "block.minecraft.light_blue_carpet": "Lite Bloo Cat Rug", + "block.minecraft.light_blue_concrete": "Layte Bluu tough bluk", + "block.minecraft.light_blue_concrete_powder": "Layte Bluu tough bluk powdr", + "block.minecraft.light_blue_glazed_terracotta": "Layte Bluu mosaic", + "block.minecraft.light_blue_shulker_box": "Lite Blue Shulker Bux", + "block.minecraft.light_blue_stained_glass": "Lit Bloo Staned Glas", + "block.minecraft.light_blue_stained_glass_pane": "Lit Bloo Staned Glas Pan", + "block.minecraft.light_blue_terracotta": "Lite Blu Teracottah", + "block.minecraft.light_blue_wool": "Lite Bloo Fur Bluk", + "block.minecraft.light_gray_banner": "ligt grai bahnor", + "block.minecraft.light_gray_bed": "Lite Grehy Bed", + "block.minecraft.light_gray_candle": "Lite gra hot stik", + "block.minecraft.light_gray_candle_cake": "Caek wif Lite Grai Candl", + "block.minecraft.light_gray_carpet": "Lite Gray Cat Rug", + "block.minecraft.light_gray_concrete": "Layte Grey tough bluk", + "block.minecraft.light_gray_concrete_powder": "Layte grey tough bluk powdr", + "block.minecraft.light_gray_glazed_terracotta": "Layte Grey mosaic", + "block.minecraft.light_gray_shulker_box": "Lite Gray Shulker Bux", + "block.minecraft.light_gray_stained_glass": "Lightly Grayen Stainedly Grazz", + "block.minecraft.light_gray_stained_glass_pane": "Lit Gray Staned Glas Pan", + "block.minecraft.light_gray_terracotta": "Lite Greyh Teracottah", + "block.minecraft.light_gray_wool": "Lite Gray Fur Bluk", + "block.minecraft.light_weighted_pressure_plate": "liht weightefd prueusure platt", + "block.minecraft.lightning_rod": "Litnin rot", + "block.minecraft.lilac": "tall purpl flowr", + "block.minecraft.lily_of_the_valley": "Lily of da Vallyz", + "block.minecraft.lily_pad": "big watr leef", + "block.minecraft.lime_banner": "liem bahnor", + "block.minecraft.lime_bed": "Limeh Bed", + "block.minecraft.lime_candle": "Liem hot stik", + "block.minecraft.lime_candle_cake": "Caek wif Liem Land pickl", + "block.minecraft.lime_carpet": "Limd Cat Rug", + "block.minecraft.lime_concrete": "Layme tough bluk", + "block.minecraft.lime_concrete_powder": "Layme tough bluk powdr", + "block.minecraft.lime_glazed_terracotta": "Layme mosaic", + "block.minecraft.lime_shulker_box": "Limd Shulker Bux", + "block.minecraft.lime_stained_glass": "Lim Staned Glas", + "block.minecraft.lime_stained_glass_pane": "Lim Staned Glas Pan", + "block.minecraft.lime_terracotta": "Laym Teracottah", + "block.minecraft.lime_wool": "Limd Fur Bluk", + "block.minecraft.lodestone": "Loserstone", + "block.minecraft.loom": "L\u00f6\u00f6m", + "block.minecraft.magenta_banner": "megentre bahnor", + "block.minecraft.magenta_bed": "Majenta Bed", + "block.minecraft.magenta_candle": "Majentra land pikl", + "block.minecraft.magenta_candle_cake": "Caek wif Majentra Land pikl", + "block.minecraft.magenta_carpet": "Majenta Cat Rug", + "block.minecraft.magenta_concrete": "Majenta tough bluk", + "block.minecraft.magenta_concrete_powder": "Majentah tough bluk powdr", + "block.minecraft.magenta_glazed_terracotta": "Majentah mosaic", + "block.minecraft.magenta_shulker_box": "Majenta Shulker Bux", + "block.minecraft.magenta_stained_glass": "Magentar Stainedlyd Glazz", + "block.minecraft.magenta_stained_glass_pane": "Majenta Staned Glas Pan", + "block.minecraft.magenta_terracotta": "Majenta Teracottah", + "block.minecraft.magenta_wool": "Majenta Fur Bluk", + "block.minecraft.magma_block": "Hot Bluk", + "block.minecraft.mangrove_button": "mengruv buton", + "block.minecraft.mangrove_door": "Mangroff door", + "block.minecraft.mangrove_fence": "Redwud scratchin pawst", + "block.minecraft.mangrove_fence_gate": "mengroff fens dor", + "block.minecraft.mangrove_leaves": "Mengroff salud", + "block.minecraft.mangrove_log": "Mangroff lawg", + "block.minecraft.mangrove_planks": "Mangroff PlAnKz", + "block.minecraft.mangrove_pressure_plate": "Mengruv pwesuwe pleite", + "block.minecraft.mangrove_propagule": "baby mangroff", + "block.minecraft.mangrove_roots": "Mangroff roots", + "block.minecraft.mangrove_sign": "Mengroff sihg", + "block.minecraft.mangrove_slab": "Mengroff Half Block", + "block.minecraft.mangrove_stairs": "Mangroff steppie", + "block.minecraft.mangrove_trapdoor": "Mangroff Trap", + "block.minecraft.mangrove_wall_sign": "Mangroff horizontal welcome matt", + "block.minecraft.mangrove_wood": "Mangroff wood", + "block.minecraft.medium_amethyst_bud": "Midl purpur shinee", + "block.minecraft.melon": "mlon", + "block.minecraft.melon_stem": "melon stik", + "block.minecraft.moss_block": "squishy gras blok", + "block.minecraft.moss_carpet": "squeeshd grazz", + "block.minecraft.mossy_cobblestone": "DURTY COBULSTOWN", + "block.minecraft.mossy_cobblestone_slab": "Mossy Cobulston Sleb", + "block.minecraft.mossy_cobblestone_stairs": "Mossy Cobulston Stairz", + "block.minecraft.mossy_cobblestone_wall": "DURTY COBULSTOWN WALL", + "block.minecraft.mossy_stone_brick_slab": "Mossy Ston Brick Sleb", + "block.minecraft.mossy_stone_brick_stairs": "Mossy Ston Brik Stairz", + "block.minecraft.mossy_stone_brick_wall": "Mossy Ston Brik Wal", + "block.minecraft.mossy_stone_bricks": "Stacked Greenish Rockz", + "block.minecraft.moving_piston": "dis piston is movin", + "block.minecraft.mud": "dirty water", + "block.minecraft.mud_brick_slab": "dirty water brik sleb", + "block.minecraft.mud_brick_stairs": "dirty water steppie", + "block.minecraft.mud_brick_wall": "dirty water brik wal", + "block.minecraft.mud_bricks": "dirty water briks", + "block.minecraft.muddy_mangrove_roots": "Mengroff dirt roots", + "block.minecraft.mushroom_stem": "Mushroom Stem", + "block.minecraft.mycelium": "miceliwm", + "block.minecraft.nether_brick_fence": "Nether brik fens", + "block.minecraft.nether_brick_slab": "Nether brik slav", + "block.minecraft.nether_brick_stairs": "Nether Brik Sters", + "block.minecraft.nether_brick_wall": "Nether brik Wal", + "block.minecraft.nether_bricks": "Brik from Nether", + "block.minecraft.nether_gold_ore": "Netherockz wif Guld", + "block.minecraft.nether_portal": "Nether purtal", + "block.minecraft.nether_quartz_ore": "Nether Kworts Ore", + "block.minecraft.nether_sprouts": "Nether Sprowts", + "block.minecraft.nether_wart": "Icky Nether plant", + "block.minecraft.nether_wart_block": "Nether warz bluk", + "block.minecraft.netherite_block": "Block of Netherite", + "block.minecraft.netherrack": "Netherrack", + "block.minecraft.note_block": "nowht blohk", + "block.minecraft.oak_button": "Oak Button", + "block.minecraft.oak_door": "Oak Dor", + "block.minecraft.oak_fence": "oke fenz", + "block.minecraft.oak_fence_gate": "Oke Wod fence Gate", + "block.minecraft.oak_leaves": "oak salad", + "block.minecraft.oak_log": "Oak lawg", + "block.minecraft.oak_planks": "oak bloc", + "block.minecraft.oak_pressure_plate": "Oak Prseure Pleitz", + "block.minecraft.oak_sapling": "baby oak", + "block.minecraft.oak_sign": "Ook Sign", + "block.minecraft.oak_slab": "Oak Sleb", + "block.minecraft.oak_stairs": "WOAKOAK Stairz", + "block.minecraft.oak_trapdoor": "Oak Trap", + "block.minecraft.oak_wall_sign": "Ook Sign on ur wall", + "block.minecraft.oak_wood": "Oak Wuud", + "block.minecraft.observer": "CREEPY StaLKeR DuDE", + "block.minecraft.obsidian": "hardest thing evar", + "block.minecraft.ochre_froglight": "Yelo toedshin", + "block.minecraft.ominous_banner": "skeri bahnor", + "block.minecraft.orange_banner": "oreng bahnor", + "block.minecraft.orange_bed": "Orang Bed", + "block.minecraft.orange_candle": "Ornge land pikl", + "block.minecraft.orange_candle_cake": "Caek wif Ornge Land pikl", + "block.minecraft.orange_carpet": "Ornge Cat Rug", + "block.minecraft.orange_concrete": "Orang tough bluk", + "block.minecraft.orange_concrete_powder": "Orang tough bluk powdr", + "block.minecraft.orange_glazed_terracotta": "Orang mosaic", + "block.minecraft.orange_shulker_box": "Ornge Shulker Bux", + "block.minecraft.orange_stained_glass": "Oranz Staned Glas", + "block.minecraft.orange_stained_glass_pane": "Oranz Staned Glas Pan", + "block.minecraft.orange_terracotta": "Orang Teracottah", + "block.minecraft.orange_tulip": "Ornge tulehp", + "block.minecraft.orange_wool": "Ornge Fur Bluk", + "block.minecraft.oxeye_daisy": "big wite flowr", + "block.minecraft.oxidized_copper": "Very-old copurr", + "block.minecraft.oxidized_cut_copper": "Very-old sliced copurr", + "block.minecraft.oxidized_cut_copper_slab": "Very-old Copurr sleb", + "block.minecraft.oxidized_cut_copper_stairs": "Very-old Copurr sters", + "block.minecraft.packed_ice": "Pack'd Frozen Water", + "block.minecraft.packed_mud": "dirty water compact", + "block.minecraft.pearlescent_froglight": "Perlecsetn Toadshine", + "block.minecraft.peony": "pony plant", + "block.minecraft.petrified_oak_slab": "Petrifid Oak Sleb", + "block.minecraft.pink_banner": "pinek bahnor", + "block.minecraft.pink_bed": "Pinky Bed", + "block.minecraft.pink_candle": "Pinc land pikl", + "block.minecraft.pink_candle_cake": "Caek wif Pinc Land pikl", + "block.minecraft.pink_carpet": "Pinky Cat Rug", + "block.minecraft.pink_concrete": "Pinkyyy tough bluk", + "block.minecraft.pink_concrete_powder": "Pinkyyy tough bluk powdr", + "block.minecraft.pink_glazed_terracotta": "Pinkyyy mosaic", + "block.minecraft.pink_shulker_box": "Pinky Shulker Bux", + "block.minecraft.pink_stained_glass": "Pingk Staned Glas", + "block.minecraft.pink_stained_glass_pane": "Pingk Staned Glas Pan", + "block.minecraft.pink_terracotta": "Pinky Teracottah", + "block.minecraft.pink_tulip": "Pink tulehp", + "block.minecraft.pink_wool": "Pinky Fur Bluk", + "block.minecraft.piston": "Pushur", + "block.minecraft.piston_head": "pushy-uppy face", + "block.minecraft.player_head": "Kat Hed", + "block.minecraft.player_head.named": "%s's Hed", + "block.minecraft.player_wall_head": "Cat Wall Hed", + "block.minecraft.podzol": "Durtee durt", + "block.minecraft.pointed_dripstone": "Sharp cave rok", + "block.minecraft.polished_andesite": "pretteh grey rock", + "block.minecraft.polished_andesite_slab": "Pretteh Grey Rock Sleb", + "block.minecraft.polished_andesite_stairs": "Pretteh Grey Rock Stairz", + "block.minecraft.polished_basalt": "cleened baisolt", + "block.minecraft.polished_blackstone": "polised bleckston", + "block.minecraft.polished_blackstone_brick_slab": "shiny blak rok brik slab", + "block.minecraft.polished_blackstone_brick_stairs": "shiny blak rok brik sters", + "block.minecraft.polished_blackstone_brick_wall": "polised bleck brik wal", + "block.minecraft.polished_blackstone_bricks": "Preteh bleck rockz stackd", + "block.minecraft.polished_blackstone_button": "shiny blak rok buton", + "block.minecraft.polished_blackstone_pressure_plate": "shiny blak rok step button", + "block.minecraft.polished_blackstone_slab": "shiny blak rok sleb", + "block.minecraft.polished_blackstone_stairs": "shiny blak rok sters", + "block.minecraft.polished_blackstone_wall": "shiny blak rok wal", + "block.minecraft.polished_deepslate": "shiny dark ston", + "block.minecraft.polished_deepslate_slab": "shiny dark ston sleb", + "block.minecraft.polished_deepslate_stairs": "shiny dark ston stairz", + "block.minecraft.polished_deepslate_wall": "shiny dark ston wal", + "block.minecraft.polished_diorite": "pretteh kitteh litter rockz", + "block.minecraft.polished_diorite_slab": "Pretteh Diorito Sleb", + "block.minecraft.polished_diorite_stairs": "Pretteh Diorito Stairz", + "block.minecraft.polished_granite": "pretteh red rock", + "block.minecraft.polished_granite_slab": "Pretteh Red Rock Sleb", + "block.minecraft.polished_granite_stairs": "Pretteh Red Rock Stairz", + "block.minecraft.poppy": "poopy", + "block.minecraft.potatoes": "Taturs", + "block.minecraft.potted_acacia_sapling": "Pottd acazia saplin", + "block.minecraft.potted_allium": "Pottd alium", + "block.minecraft.potted_azalea_bush": "Pottd Alakazam", + "block.minecraft.potted_azure_bluet": "Pottd azur blut", + "block.minecraft.potted_bamboo": "Pottd green stick", + "block.minecraft.potted_birch_sapling": "Pottd birsh saplin", + "block.minecraft.potted_blue_orchid": "Pottd bluu orkid", + "block.minecraft.potted_brown_mushroom": "Pottd bron shroom", + "block.minecraft.potted_cactus": "Pottd cacus", + "block.minecraft.potted_cornflower": "Pottd Cornflowerpower", + "block.minecraft.potted_crimson_fungus": "Pottd Crimzin Foongiz", + "block.minecraft.potted_crimson_roots": "Pottd Crimzn Rutez", + "block.minecraft.potted_dandelion": "Pottd danksdelion", + "block.minecraft.potted_dark_oak_sapling": "Pottd darkok saplin", + "block.minecraft.potted_dead_bush": "Pottd ded bujsh", + "block.minecraft.potted_fern": "Pottd ferrn", + "block.minecraft.potted_flowering_azalea_bush": "Pottd Flowerig Alakazam", + "block.minecraft.potted_jungle_sapling": "Pottd junle saplin", + "block.minecraft.potted_lily_of_the_valley": "Pottd Lily of za Valley", + "block.minecraft.potted_mangrove_propagule": "Mangroff baby inpot", + "block.minecraft.potted_oak_sapling": "Pottd ok saplin", + "block.minecraft.potted_orange_tulip": "Pottd orang tlip", + "block.minecraft.potted_oxeye_daisy": "Pottd oxyey daisye", + "block.minecraft.potted_pink_tulip": "Pottd pikk tlip", + "block.minecraft.potted_poppy": "Pottd popi", + "block.minecraft.potted_red_mushroom": "Pottd red shroom", + "block.minecraft.potted_red_tulip": "Pottd red tlip", + "block.minecraft.potted_spruce_sapling": "Pottd sprus saplin", + "block.minecraft.potted_warped_fungus": "Pottd Warpt Foongis", + "block.minecraft.potted_warped_roots": "Pottd Warpd Rootz", + "block.minecraft.potted_white_tulip": "Pottd wit tlip", + "block.minecraft.potted_wither_rose": "Pottd Wither Roos", + "block.minecraft.powder_snow": "Powdr Sno", + "block.minecraft.powder_snow_cauldron": "Big bukkit wit Powdr Sno", + "block.minecraft.powered_rail": "PUWERD RAIL", + "block.minecraft.prismarine": "Prizmarine", + "block.minecraft.prismarine_brick_slab": "blue sleb thing", + "block.minecraft.prismarine_brick_stairs": "prizrin strs", + "block.minecraft.prismarine_bricks": "Prizmarine Briks", + "block.minecraft.prismarine_slab": "Prizmarine Sleb", + "block.minecraft.prismarine_stairs": "Prizmarine thingy", + "block.minecraft.prismarine_wall": "Prizmarine Wal", + "block.minecraft.pumpkin": "Pangkan", + "block.minecraft.pumpkin_stem": "Dat thing teh orange scary thing grows on", + "block.minecraft.purple_banner": "purrrpel bahnor", + "block.minecraft.purple_bed": "Parpal Bed", + "block.minecraft.purple_candle": "Parpal hot stik", + "block.minecraft.purple_candle_cake": "Caek wif Purpl Candl", + "block.minecraft.purple_carpet": "Parpal Cat Rug", + "block.minecraft.purple_concrete": "Perpl tough bluk", + "block.minecraft.purple_concrete_powder": "Perpl tough bluk powdr", + "block.minecraft.purple_glazed_terracotta": "Perpl mosaic", + "block.minecraft.purple_shulker_box": "Parpal Shulker Bux", + "block.minecraft.purple_stained_glass": "Purply Stainedly Glazz", + "block.minecraft.purple_stained_glass_pane": "Parpal Staned Glas Pan", + "block.minecraft.purple_terracotta": "Parpal Teracottah", + "block.minecraft.purple_wool": "Parpal Fur Bluk", + "block.minecraft.purpur_block": "OOO PURPUR Bluk", + "block.minecraft.purpur_pillar": "OOO PURPUR Bluk w/ Stripez", + "block.minecraft.purpur_slab": "OOO PURPUR Bluk Cut In Half", + "block.minecraft.purpur_stairs": "OOO PURPUR Bluk U Can Climb", + "block.minecraft.quartz_block": "Blak Av Kworts", + "block.minecraft.quartz_bricks": "Kwartz brickz", + "block.minecraft.quartz_pillar": "Kwartz piler", + "block.minecraft.quartz_slab": "White half blok", + "block.minecraft.quartz_stairs": "Kworts Sters", + "block.minecraft.rail": "Trakz", + "block.minecraft.raw_copper_block": "Bluk ov moldy wurst", + "block.minecraft.raw_gold_block": "Bluk ov shiny coal", + "block.minecraft.raw_iron_block": "Bluk ov RAWWWW irun", + "block.minecraft.red_banner": "Red bahnor", + "block.minecraft.red_bed": "Reddish Bed", + "block.minecraft.red_candle": "Red land pikl", + "block.minecraft.red_candle_cake": "Caek wif Rd Candl", + "block.minecraft.red_carpet": "Redish Cat Rug", + "block.minecraft.red_concrete": "Redish tough bluk", + "block.minecraft.red_concrete_powder": "Redish tough bluk powdr", + "block.minecraft.red_glazed_terracotta": "Redish mosaic", + "block.minecraft.red_mushroom": "blood Mooshroom", + "block.minecraft.red_mushroom_block": "blood Mushroom blok", + "block.minecraft.red_nether_brick_slab": "Red Sleb that Nether bricks", + "block.minecraft.red_nether_brick_stairs": "Red Nether Brik Sters", + "block.minecraft.red_nether_brick_wall": "Red Nether brik Wal", + "block.minecraft.red_nether_bricks": "Blud Nether brik", + "block.minecraft.red_sand": "Red sand", + "block.minecraft.red_sandstone": "Warmy sanstown", + "block.minecraft.red_sandstone_slab": "Rds litterbox slab", + "block.minecraft.red_sandstone_stairs": "Rds litterbox sters", + "block.minecraft.red_sandstone_wall": "Redy Sandston Wal", + "block.minecraft.red_shulker_box": "Redish Shulker Bux", + "block.minecraft.red_stained_glass": "Read Stainedly Glazz", + "block.minecraft.red_stained_glass_pane": "rud thin culurd thingy", + "block.minecraft.red_terracotta": "Reddish Teracottah", + "block.minecraft.red_tulip": "Red tulehp", + "block.minecraft.red_wool": "Redish Fur Bluk", + "block.minecraft.redstone_block": "Redstone Bluk", + "block.minecraft.redstone_lamp": "Redstone lapm", + "block.minecraft.redstone_ore": "Rockz wif Redstone", + "block.minecraft.redstone_torch": "Glowy Redstone Stik", + "block.minecraft.redstone_wall_torch": "Glowy Redstone Wall Stik", + "block.minecraft.redstone_wire": "Redstone Whyr", + "block.minecraft.reinforced_deepslate": "dark ston wit weird thing outside idk", + "block.minecraft.repeater": "Redstone Repeetah", + "block.minecraft.repeating_command_block": "Again Doing Block", + "block.minecraft.respawn_anchor": "Reezpon mawgic blok", + "block.minecraft.rooted_dirt": "durt wit stickz", + "block.minecraft.rose_bush": "Rose brah", + "block.minecraft.sand": "litter box stuffs", + "block.minecraft.sandstone": "litter box rockz", + "block.minecraft.sandstone_slab": "sansdstoen sleb", + "block.minecraft.sandstone_stairs": "Sanston Sters", + "block.minecraft.sandstone_wall": "Sandston Wal", + "block.minecraft.scaffolding": "Sceffolding", + "block.minecraft.sculk": "Sculk", + "block.minecraft.sculk_catalyst": "Sculk Cat-alist", + "block.minecraft.sculk_sensor": "Sculk detektor", + "block.minecraft.sculk_shrieker": "Kat Yeller", + "block.minecraft.sculk_vein": "Smol sculk", + "block.minecraft.sea_lantern": "See lanturn", + "block.minecraft.sea_pickle": "See pikol", + "block.minecraft.seagrass": "MARIN GRAZZ", + "block.minecraft.set_spawn": "hear is new kat home!!", + "block.minecraft.shroomlight": "Shroomy Lite", + "block.minecraft.shulker_box": "Shulker Bux", + "block.minecraft.skeleton_skull": "Spooke scury Skeletun Faze", + "block.minecraft.skeleton_wall_skull": "Spooke Scury Skeletun Wall Hed", + "block.minecraft.slime_block": "bouncy green stuff", + "block.minecraft.small_amethyst_bud": "Smol purpur shinee", + "block.minecraft.small_dripleaf": "Smol fall thru plantt", + "block.minecraft.smithing_table": "Smissing Table", + "block.minecraft.smoker": "Za Smoker", + "block.minecraft.smooth_basalt": "smoos bazalt", + "block.minecraft.smooth_quartz": "Smooth Wite Kat Blawk", + "block.minecraft.smooth_quartz_slab": "Smooth Qwartz Sleb", + "block.minecraft.smooth_quartz_stairs": "Smooth Qwartz Stairz", + "block.minecraft.smooth_red_sandstone": "Smud warmy sanstown", + "block.minecraft.smooth_red_sandstone_slab": "Smooth Redy Sandston Sleb", + "block.minecraft.smooth_red_sandstone_stairs": "Smooth Redy Sandston Stairz", + "block.minecraft.smooth_sandstone": "smooth litter box rockz", + "block.minecraft.smooth_sandstone_slab": "Smooth Sandston Sleb", + "block.minecraft.smooth_sandstone_stairs": "Smooth Sandston Stairz", + "block.minecraft.smooth_stone": "Smooth Rockz", + "block.minecraft.smooth_stone_slab": "Smooth Ston Sleb", + "block.minecraft.snow": "Cold white stuff", + "block.minecraft.snow_block": "Snowi bloc", + "block.minecraft.soul_campfire": "sul camfiri", + "block.minecraft.soul_fire": "bloo hot stuff", + "block.minecraft.soul_lantern": "Sol Lanturn", + "block.minecraft.soul_sand": "sole snd", + "block.minecraft.soul_soil": "ded peeple dirt", + "block.minecraft.soul_torch": "Creepy torch thingy", + "block.minecraft.soul_wall_torch": "Creepy torch thingy on de wal", + "block.minecraft.spawn.not_valid": "U iz homelezz nao cuz ur hoem bed or charjd respwn anchr, or wuz obstructd", + "block.minecraft.spawner": "Spaawnr", + "block.minecraft.sponge": "Spangblob", + "block.minecraft.spore_blossom": "snees flowar", + "block.minecraft.spruce_button": "Sproos Button", + "block.minecraft.spruce_door": "Spruz Dor", + "block.minecraft.spruce_fence": "Sprce Fenc", + "block.minecraft.spruce_fence_gate": "Sprce Fenc Gaet", + "block.minecraft.spruce_leaves": "spruce salad", + "block.minecraft.spruce_log": "Spruce lawg", + "block.minecraft.spruce_planks": "dark wooden bloc", + "block.minecraft.spruce_pressure_plate": "Sproos Prseure Pleitz", + "block.minecraft.spruce_sapling": "baby spurce", + "block.minecraft.spruce_sign": "Sproos Sign", + "block.minecraft.spruce_slab": "Sproos Sleb", + "block.minecraft.spruce_stairs": "Sproos Stairz", + "block.minecraft.spruce_trapdoor": "Sproos Trap", + "block.minecraft.spruce_wall_sign": "Sproos Sign on ur wall", + "block.minecraft.spruce_wood": "Spruz Wuud", + "block.minecraft.sticky_piston": "Stickeh Pushurr", + "block.minecraft.stone": "Rock", + "block.minecraft.stone_brick_slab": "Ston Brick Sleb", + "block.minecraft.stone_brick_stairs": "Stone Brik Sters", + "block.minecraft.stone_brick_wall": "Ston Brik Wal", + "block.minecraft.stone_bricks": "Stackd Rockz", + "block.minecraft.stone_button": "Stoon Button", + "block.minecraft.stone_pressure_plate": "Stone Presar Plat", + "block.minecraft.stone_slab": "stne slab", + "block.minecraft.stone_stairs": "Ston Stairz", + "block.minecraft.stonecutter": "Shrpy movin thingy", + "block.minecraft.stripped_acacia_log": "Naked Acashuh lawg", + "block.minecraft.stripped_acacia_wood": "Naked Acashuh Bawk", + "block.minecraft.stripped_birch_log": "Naked berch lawg", + "block.minecraft.stripped_birch_wood": "Naked Berch Bawk", + "block.minecraft.stripped_crimson_hyphae": "Da werd red nehtr plnta but neked", + "block.minecraft.stripped_crimson_stem": "Nakd crimzon stem", + "block.minecraft.stripped_dark_oak_log": "Naked shaded-O lawg", + "block.minecraft.stripped_dark_oak_wood": "Naked Blak Oac Bawk", + "block.minecraft.stripped_jungle_log": "Naked juncle lawg", + "block.minecraft.stripped_jungle_wood": "Naked Juggle Bawk", + "block.minecraft.stripped_mangrove_log": "Neked mengroff lawg", + "block.minecraft.stripped_mangrove_wood": "Neked mengroff wuud", + "block.minecraft.stripped_oak_log": "Naked Oac lawg", + "block.minecraft.stripped_oak_wood": "Naked Oac Bawk", + "block.minecraft.stripped_spruce_log": "Naked spruice lawg", + "block.minecraft.stripped_spruce_wood": "Naked Sproos Bawk", + "block.minecraft.stripped_warped_hyphae": "Da werd nethr plnt butt nakie", + "block.minecraft.stripped_warped_stem": "Naekt Warpt Stem", + "block.minecraft.structure_block": "Strcter blek", + "block.minecraft.structure_void": "Blank space", + "block.minecraft.sugar_cane": "BAMBOOO", + "block.minecraft.sunflower": "Rly tall flowr", + "block.minecraft.sweet_berry_bush": "Sweet Bery Bush", + "block.minecraft.tall_grass": "Tall Gras", + "block.minecraft.tall_seagrass": "TOLL MARIN GRAZZ", + "block.minecraft.target": "Tawget", + "block.minecraft.terracotta": "Terrakattah", + "block.minecraft.tinted_glass": "Skary glazz", + "block.minecraft.tnt": "BOOM", + "block.minecraft.torch": "burny stick", + "block.minecraft.trapped_chest": "Rigged Cat Box", + "block.minecraft.tripwire": "String", + "block.minecraft.tripwire_hook": "String huk", + "block.minecraft.tube_coral": "Tuf koral", + "block.minecraft.tube_coral_block": "Tuf koral cube", + "block.minecraft.tube_coral_fan": "Tuf koral fen", + "block.minecraft.tube_coral_wall_fan": "Tueb Corahl Wahll Fahn", + "block.minecraft.tuff": "Tfff", + "block.minecraft.turtle_egg": "Tertl ball", + "block.minecraft.twisting_vines": "Spyrale noodel", + "block.minecraft.twisting_vines_plant": "Spyrale noodel plont", + "block.minecraft.verdant_froglight": "Grin Toadshine", + "block.minecraft.vine": "Climbin plantz", + "block.minecraft.void_air": "vOoId", + "block.minecraft.wall_torch": "burny stick on de wall", + "block.minecraft.warped_button": "Warpt Thingy", + "block.minecraft.warped_door": "Warpt Big Kat Door", + "block.minecraft.warped_fence": "Warpt Fenc", + "block.minecraft.warped_fence_gate": "Warpt Fenc Gaet", + "block.minecraft.warped_fungus": "Warpt Foongis", + "block.minecraft.warped_hyphae": "Wierd nethr plant", + "block.minecraft.warped_nylium": "wrped nyanium", + "block.minecraft.warped_planks": "Warpt Plaenkz", + "block.minecraft.warped_pressure_plate": "Wapt Weight Plaet", + "block.minecraft.warped_roots": "Warpt Roods", + "block.minecraft.warped_sign": "Warpt Texxt Bawrd", + "block.minecraft.warped_slab": "Warpt Slaep", + "block.minecraft.warped_stairs": "Worp Katstairs", + "block.minecraft.warped_stem": "Warpt trunkk", + "block.minecraft.warped_trapdoor": "Warpt Kat Door", + "block.minecraft.warped_wall_sign": "Warpt wol book", + "block.minecraft.warped_wart_block": "Warpt Pimpl Blawk", + "block.minecraft.water": "Watr", + "block.minecraft.water_cauldron": "big bukkit wit watr", + "block.minecraft.waxed_copper_block": "Shiny Blok of copurr", + "block.minecraft.waxed_cut_copper": "Waxd an sliecd copurr", + "block.minecraft.waxed_cut_copper_slab": "Yucky slised copurr sleb", + "block.minecraft.waxed_cut_copper_stairs": "Yucky slised copurr sters", + "block.minecraft.waxed_exposed_copper": "Shiny Seen Copurr", + "block.minecraft.waxed_exposed_cut_copper": "Shiny Seen Sliced Copurr", + "block.minecraft.waxed_exposed_cut_copper_slab": "Shineh Seen Sliced Steal Half Block", + "block.minecraft.waxed_exposed_cut_copper_stairs": "Shiny Seen Sliced Steal sters", + "block.minecraft.waxed_oxidized_copper": "Shiny very-old copurr", + "block.minecraft.waxed_oxidized_cut_copper": "Shiny very-old sliced copurr", + "block.minecraft.waxed_oxidized_cut_copper_slab": "Shiny very-old copurr sleb", + "block.minecraft.waxed_oxidized_cut_copper_stairs": "Shiny cery-old copurr sters", + "block.minecraft.waxed_weathered_copper": "Yucky old copurr", + "block.minecraft.waxed_weathered_cut_copper": "Shiny Yucky old sliced copurr", + "block.minecraft.waxed_weathered_cut_copper_slab": "Shiny rained sliced steal half block", + "block.minecraft.waxed_weathered_cut_copper_stairs": "Shiny rained sliced copurr sters", + "block.minecraft.weathered_copper": "Rainy copurr", + "block.minecraft.weathered_cut_copper": "Old slised copurr", + "block.minecraft.weathered_cut_copper_slab": "Kinda-old slised copurr bluk haf", + "block.minecraft.weathered_cut_copper_stairs": "Old yucky slised copurr sters", + "block.minecraft.weeping_vines": "oh no y u cry roof noddle", + "block.minecraft.weeping_vines_plant": "sad noodle plant", + "block.minecraft.wet_sponge": "wet Spangblob", + "block.minecraft.wheat": "Wheat Crops", + "block.minecraft.white_banner": "blenk bahnor", + "block.minecraft.white_bed": "Waite Bed", + "block.minecraft.white_candle": "Wite land pikl", + "block.minecraft.white_candle_cake": "Caek wif Wite Land pickl", + "block.minecraft.white_carpet": "White scratchy stuff", + "block.minecraft.white_concrete": "Wyte tough bluk", + "block.minecraft.white_concrete_powder": "Wayte tough bluk powdr", + "block.minecraft.white_glazed_terracotta": "Wayte mosaic", + "block.minecraft.white_shulker_box": "Waite Shulker Bux", + "block.minecraft.white_stained_glass": "Wite Staind Glas", + "block.minecraft.white_stained_glass_pane": "Whitty Glazz Payn", + "block.minecraft.white_terracotta": "Waite Terrakattah", + "block.minecraft.white_tulip": "Wite tulehp", + "block.minecraft.white_wool": "Waite Fur Bluk", + "block.minecraft.wither_rose": "Wither Roos", + "block.minecraft.wither_skeleton_skull": "Wither Skellyton Skul", + "block.minecraft.wither_skeleton_wall_skull": "Wither Skellyton Wall", + "block.minecraft.yellow_banner": "yelloh bahnor", + "block.minecraft.yellow_bed": "Banana Bed", + "block.minecraft.yellow_candle": "Yello land pikl", + "block.minecraft.yellow_candle_cake": "Caek Wif Yelow Candle", + "block.minecraft.yellow_carpet": "Yello Cat Rug", + "block.minecraft.yellow_concrete": "Yello tough bluk", + "block.minecraft.yellow_concrete_powder": "Yellow tough bluk powdr", + "block.minecraft.yellow_glazed_terracotta": "Yellow mosaic", + "block.minecraft.yellow_shulker_box": "Yello Shulker Bux", + "block.minecraft.yellow_stained_glass": "Yelo Staned Glas", + "block.minecraft.yellow_stained_glass_pane": "Yelo Staned Glas Pan", + "block.minecraft.yellow_terracotta": "Yollo Terrakattah", + "block.minecraft.yellow_wool": "Yello Fur Bluk", + "block.minecraft.zombie_head": "Zombee Hed", + "block.minecraft.zombie_wall_head": "Ded Person Wall Hed", + "book.byAuthor": "by %1$s", + "book.editTitle": "Titl 4 ur book:", + "book.finalizeButton": "sighn an uplode", + "book.finalizeWarning": "Warnin!!1! whenz you sign teh bok it cantz be changedz!!1", + "book.generation.0": "FIRST!", + "book.generation.1": "copee of first", + "book.generation.2": "copee off copee", + "book.generation.3": "scratched up (i didnt do dat)", + "book.invalid.tag": "* Invalud buk tag *", + "book.pageIndicator": "page %1$s of a bunch (%2$s)", + "book.signButton": "Put najm", + "build.tooHigh": "tallnes limet for bilding iz %s", + "chat.cannotSend": "sry m8 cants send chatz msg", + "chat.coordinates": "%s, %s, %s", + "chat.coordinates.tooltip": "Click 2 teleportz", + "chat.copy": "SAEV 4 L8R", + "chat.copy.click": "klix tu cop 2 catbord", + "chat.disabled.expiredProfileKey": "Chats disabld cuz publik kee expaired. Try reconectin plss", + "chat.disabled.launcher": "Chat disabld by launchr opshun. Cannot sen mesage", + "chat.disabled.options": "Chat turnd off in cleint opshinz", + "chat.disabled.profile": "Chat not allowed by akownt settins. Press '%s' again 4 more informashun", + "chat.disabled.profile.moreInfo": "Chat not allowed by akownt settins. Cannot send or view mesagez.", + "chat.editBox": "chatz", + "chat.filtered_full": "Teh servr has hidden ur mesage 4 some playrs.", + "chat.link.confirm": "R u sur u wants 2 open teh followin websiet?", + "chat.link.confirmTrusted": "Wants 2 opn or u wants 2 saev it 4 l8r?", + "chat.link.open": "Opin in browzr", + "chat.link.warning": "Nevr open linkz frum kittehs u doan't trust!", + "chat.previewInput": "Press [%s] 2 see", + "chat.queue": "[+%s pandig limes]", + "chat.square_brackets": "[%s]", + "chat.tag.filtered": "Dis mesage haz been filtred by teh servr.", + "chat.tag.modified": "Dis mesage haz been modified by teh servr.", + "chat.tag.modified.original": "Furst text: %s", + "chat.tag.not_secure": "Dis mesage iz not secure, which means dat it might hav been modified by teh servr", + "chat.type.admin": "[%s: %s]", + "chat.type.advancement.challenge": "%s didz %s clap clap meeee", + "chat.type.advancement.goal": "%s dids %s omg gg bro", + "chat.type.advancement.task": "%s haz maed da atfancemend %s", + "chat.type.announcement": "[%s] %s", + "chat.type.emote": "* %s %s", + "chat.type.team.hover": "Mesedg Tem", + "chat.type.team.sent": "-> %s <%s> %s", + "chat.type.team.text": "%s <%s> %s", + "chat.type.text": "<%s> %s", + "chat.type.text.narrate": "%s sayz %s", + "chatPreview.warning.check": "No ask u gain fer da server", + "chatPreview.warning.content": "Chat Preview allows teh servr 2 see ur mesagez before they r sent 2 other playrs. Dis allows a server 2 send u a preview ov ur chat mesagez wif custom modificashuns an stylin applied.\n\nThe Chat Preview behavior can be changed in ur Char settins. Current settin is: [%s]", + "chatPreview.warning.title": "Dis servr usz Chatz Previu", + "chatPreview.warning.toast": "Dis servr usez Chat Pweview & can see ur msgz b4 they're sent 2 othr playrz. U can turn dis off in Chat Settins.", + "chatPreview.warning.toast.title": "Chat Preview iz enabled", + "chat_screen.message": "Mesage to sen: %s", + "chat_screen.title": "Chad screeen", + "chat_screen.usage": "Inputed mesage an prez Intr 2 sen", + "clear.failed.multiple": "No items wuz findz on %s players", + "clear.failed.single": "Nu itemz fund on pleyer %s", + "color.minecraft.black": "Blak", + "color.minecraft.blue": "Blew", + "color.minecraft.brown": "Broun", + "color.minecraft.cyan": "Nyan", + "color.minecraft.gray": "Gray", + "color.minecraft.green": "Grean", + "color.minecraft.light_blue": "Lite Blew", + "color.minecraft.light_gray": "Lite Gray", + "color.minecraft.lime": "Lyem", + "color.minecraft.magenta": "Majenta", + "color.minecraft.orange": "Stampy Colour", + "color.minecraft.pink": "Pynk", + "color.minecraft.purple": "Purpel", + "color.minecraft.red": "Red", + "color.minecraft.white": "Wite", + "color.minecraft.yellow": "Yello", + "command.context.here": "<--[LOK HER!11]", + "command.context.parse_error": "%s at pozishun %s: %s", + "command.exception": "cud not parse command: %s", + "command.expected.separator": "Expectd whitespace 2 end wan argument, but findz trailin data", + "command.failed": "An unexpectd errur occurd tryin 2 do dis cmd", + "command.unknown.argument": "Incorrect argument 4 command", + "command.unknown.command": "cant find teh commnd :( luk under 2 c y", + "commands.advancement.advancementNotFound": "No atfancemend wuz found bai de naem '%s'", + "commands.advancement.criterionNotFound": "De atfancemend '%1$s' dooz not contain de criterion '%2$s'", + "commands.advancement.grant.criterion.to.many.failure": "Coeldn't grand da kriterion '%s' uv atfancemend %s 2 %s playrs cuz they already have it", + "commands.advancement.grant.criterion.to.many.success": "Granted da criterion '%s' of atfancemend %s 2 %s kities", + "commands.advancement.grant.criterion.to.one.failure": "Coeldn't grand da kriterion '%s' uv atfancemend %s 2 %s cuz they already have it", + "commands.advancement.grant.criterion.to.one.success": "Granted da criterion '%s' of atfancemend %s 2 %s", + "commands.advancement.grant.many.to.many.failure": "Coeldn't grand %s atfancemends 2 %s pleytrs cuz they already hav em", + "commands.advancement.grant.many.to.many.success": "Granted %s atfancemends 2 %s kities", + "commands.advancement.grant.many.to.one.failure": "Coeldn't grand %s atfancemends 2 %s cuz they already hav em", + "commands.advancement.grant.many.to.one.success": "Granted %s atfancemends 2 %s", + "commands.advancement.grant.one.to.many.failure": "Coeldn't grand da atfancemend %s 2 %s playrs cuz they already have it", + "commands.advancement.grant.one.to.many.success": "Granted da atfancemend '%s' 2 %s kities", + "commands.advancement.grant.one.to.one.failure": "Coeldn't grand da atfancemend '%s' 2 %s cuz they already hav it", + "commands.advancement.grant.one.to.one.success": "Granted da atfancemend '%s' 2 %s", + "commands.advancement.revoke.criterion.to.many.failure": "Coeldn't tak da kriterion '%s' uv atfancemend %s frum %s katz cuz they no have it", + "commands.advancement.revoke.criterion.to.many.success": "Skracht standurdz '%s' of advansment squarz %s from %s katz", + "commands.advancement.revoke.criterion.to.one.failure": "Coeldn't tak da kriterion '%s' uv atfancemend %s frum %s cuz they no have it", + "commands.advancement.revoke.criterion.to.one.success": "Skracht standurdz '%s' of advansment squarz %s from %s", + "commands.advancement.revoke.many.to.many.failure": "Coodint Skrach %s advansment squarz from %s katz bcuz thay dont hav squarz", + "commands.advancement.revoke.many.to.many.success": "Skracht %s advansment squarz from %s katz", + "commands.advancement.revoke.many.to.one.failure": "Coodint Skrach %s advansment squarz from %s bcuz thay dont hav squarez", + "commands.advancement.revoke.many.to.one.success": "Skracht %s advansment squarz from %s", + "commands.advancement.revoke.one.to.many.failure": "Coeldn't tak da adfancemend %s frum %s playrs cuz they no have it", + "commands.advancement.revoke.one.to.many.success": "Tuk atvunzment %s frum %s kities", + "commands.advancement.revoke.one.to.one.failure": "Coeldn't tek atvunzment %s frum %s cuz dey no hav it", + "commands.advancement.revoke.one.to.one.success": "Tuk atvunzment %s frum %s", + "commands.attribute.base_value.get.success": "Base valooe of attribute %s 4 cat %s iz %s", + "commands.attribute.base_value.set.success": "Base valooe 4 attribute %s 4 cat %s iz nao %s", + "commands.attribute.failed.entity": "%s iz not valid entity 4 dis command", + "commands.attribute.failed.modifier_already_present": "Modifier %s alredy preznt on attribute %s 4 cat %s", + "commands.attribute.failed.no_attribute": "Cat %s haz no attribute %s", + "commands.attribute.failed.no_modifier": "Atributz %s for katz haz %s no modifer %s", + "commands.attribute.modifier.add.success": "Addz modifier %s 2 attribute %s 4 cat %s", + "commands.attribute.modifier.remove.success": "Remoovd modifier %s from attribute %s 4 cat %s", + "commands.attribute.modifier.value.get.success": "Valooe of modifier %s on attribute %s 4 cat %s iz %s", + "commands.attribute.value.get.success": "Valooe of attribute %s 4 cat %s iz %s", + "commands.ban.failed": "Nothin changd, da kat is already banned", + "commands.ban.success": "Beaned %s: %s", + "commands.banip.failed": "Nothin changd, dat IP is banned", + "commands.banip.info": "This bean affects %s playrs: %s", + "commands.banip.invalid": "Bad IP or unknown kitteh", + "commands.banip.success": "IP Beaned %s: %s", + "commands.banlist.entry": "%s was beaned by %s: %s", + "commands.banlist.list": "There r %s beans:", + "commands.banlist.none": "There r no beans", + "commands.bossbar.create.failed": "a Boshbar alweady exists with da id '%s'", + "commands.bossbar.create.success": "Kreatd cuztum bossthing %s", + "commands.bossbar.get.max": "cuztum bossthing %s haz new big numburz: %s", + "commands.bossbar.get.players.none": "cuztum bossthing %s haz no katz on teh linez", + "commands.bossbar.get.players.some": "cuztum bossthing %s haz %s katz on teh linez: %s", + "commands.bossbar.get.value": "cuztum bossthing %s haz new numberz: %s", + "commands.bossbar.get.visible.hidden": "cuztum bossthing %s iz hiddind", + "commands.bossbar.get.visible.visible": "cuztum bossthing %s iz shownin'", + "commands.bossbar.list.bars.none": "Der ar no cuztum bossthing aktiv", + "commands.bossbar.list.bars.some": "Der ar %s cuztum bossthing aktiv: %s", + "commands.bossbar.remove.success": "Remuvd cuztum bossthing %s", + "commands.bossbar.set.color.success": "cuztum bossthing %s haz new culurz", + "commands.bossbar.set.color.unchanged": "nothin changd, thaz already teh color ov dis bosbar", + "commands.bossbar.set.max.success": "cuztum bossthing %s haz new big numburz: %s", + "commands.bossbar.set.max.unchanged": "nothin changd, thaz already teh max ov dis bosbar", + "commands.bossbar.set.name.success": "cuztum bossthing %s haz new namez", + "commands.bossbar.set.name.unchanged": "nothin changd, thaz already teh naym ov dis bosbar", + "commands.bossbar.set.players.success.none": "cuztum bossthing %s haz no mor katz", + "commands.bossbar.set.players.success.some": "cuztum bossthing %s haz %s katz %s", + "commands.bossbar.set.players.unchanged": "Nothin changd, dose players r already on teh bosbar wif nobody 2 add or remoov", + "commands.bossbar.set.style.success": "cuztum bossthing %s haz new stylinz", + "commands.bossbar.set.style.unchanged": "nothin changd, thaz already teh style ov dis bosbar", + "commands.bossbar.set.value.success": "cuztum bossthing %s haz new numberz: %s", + "commands.bossbar.set.value.unchanged": "nothin changd, thaz already teh value ov dis bosbar", + "commands.bossbar.set.visibility.unchanged.hidden": "nothin changd, teh bosbar iz already hidden", + "commands.bossbar.set.visibility.unchanged.visible": "nothin changd, teh bosbar iz already visible", + "commands.bossbar.set.visible.success.hidden": "I cant see cuztum bossthing %s", + "commands.bossbar.set.visible.success.visible": "I can see cuztum bossthing %s", + "commands.bossbar.unknown": "No bosbar exists wif teh id %s", + "commands.clear.success.multiple": "Tuk %s stuffz from %s kittiez", + "commands.clear.success.single": "Tuk %s stuffz frum kat %s", + "commands.clear.test.multiple": "We seez %s lookeelikee stuffz on %s katz", + "commands.clear.test.single": "We seez %s lookeelikee stuffz on katz %s", + "commands.clone.failed": "no blockz wuz clond", + "commands.clone.overlap": "teh source an destinashun areas cant overlap", + "commands.clone.success": "Copy musheend %s blokz right", + "commands.clone.toobig": "2 maini blukz in teh spesified aria (macksimum %s, spesified %s)", + "commands.data.block.get": "%s on blok %s, %s, %s aftur skalez numbur of %s iz %s", + "commands.data.block.invalid": "teh target block iz not block entity", + "commands.data.block.modified": "Changeded blok infoz of %s, %s, %s", + "commands.data.block.query": "%s, %s, %s haz dis blok infoz: %s", + "commands.data.entity.get": "%s on %s after skalez numbur of %s iz %s", + "commands.data.entity.invalid": "unabl 2 modifi cat dataz", + "commands.data.entity.modified": "Modifid entitey deeta off %s", + "commands.data.entity.query": "%s haz teh followin entitey deeta: %s", + "commands.data.get.invalid": "No can doo with %s; can ownly bee number tag", + "commands.data.get.multiple": "Dis argument accepts a singl NBT value", + "commands.data.get.unknown": "Cant git %s: tag dosnt exist", + "commands.data.merge.failed": "nauthing chanched, da specifd propaties alweady hav dis values", + "commands.data.modify.expected_list": "Cat wonts many not %s", + "commands.data.modify.expected_object": "Expected object, got: %s", + "commands.data.modify.invalid_index": "Invlid lst indez: %s", + "commands.data.storage.get": "%s n sturage %s aftur skalez numbur o %s iz %s", + "commands.data.storage.modified": "Modifid reservoir %s", + "commands.data.storage.query": "Storge %s has followin subject-matter: %s", + "commands.datapack.disable.failed": "Pack %s iz not enabld!", + "commands.datapack.enable.failed": "Pack %s iz already enabld!", + "commands.datapack.list.available.none": "Ther R no infoz packz that can be yes-yes", + "commands.datapack.list.available.success": "Ther R %s infoz packz that can be yes-yes: %s", + "commands.datapack.list.enabled.none": "Ther R no infoz packz that are yes-yes", + "commands.datapack.list.enabled.success": "Ther R %s infoz packz that are yes-yes: %s", + "commands.datapack.modify.disable": "deactivatin nerdz stwuff: %s", + "commands.datapack.modify.enable": "activatin nerdz dawta stuffz: %s", + "commands.datapack.unknown": "Cat doezn't know diz data pak %s", + "commands.debug.alreadyRunning": "Teh tik profilr r alreedy startd", + "commands.debug.function.noRecursion": "kat cant traec frawm insid ov fnctoin", + "commands.debug.function.success.multiple": "Traicd %s komandz frum %s funkshinz t0 output file %s", + "commands.debug.function.success.single": "Traicd %s komandz frum funkshinz '%s' too output file %s", + "commands.debug.function.traceFailed": "coodnt trace teh functshun!", + "commands.debug.notRunning": "Teh tik profilr hasnt startd", + "commands.debug.started": "Startd tik profilin'", + "commands.debug.stopped": "Stoppd tik profilin aftr %s secondz an %s tikz (%s tikz pr secund)", + "commands.defaultgamemode.success": "%s iz naow da normul playin' for teh kittez", + "commands.deop.failed": "nothin changd, teh playr iz not an operator", + "commands.deop.success": "%s is not alfa enymor", + "commands.difficulty.failure": "Teh difficulty did not change; it already set 2 %s", + "commands.difficulty.query": "Teh diffikuty es %s", + "commands.difficulty.success": "Da ameownt of creeperz iz gunnu bee %s", + "commands.drop.no_held_items": "Entity can not hold any items... AND NEVAH WILL", + "commands.drop.no_loot_table": "Entity %s has no loot table", + "commands.drop.success.multiple": "Droppd %s itemz", + "commands.drop.success.multiple_with_table": "Droppd %s items frum za table %s", + "commands.drop.success.single": "Droppd %s %s", + "commands.drop.success.single_with_table": "Droppd %s %s stuffz frum za table %s", + "commands.effect.clear.everything.failed": "target has no effects 2 remoov", + "commands.effect.clear.everything.success.multiple": "Tuk all efekt frum %s targits", + "commands.effect.clear.everything.success.single": "Rmved all efekt fram %s", + "commands.effect.clear.specific.failed": "target doesnt has teh requestd effect", + "commands.effect.clear.specific.success.multiple": "Tuk efukt %s frum %s targits", + "commands.effect.clear.specific.success.single": "Tuk efukt %s frum %s", + "commands.effect.give.failed": "unable 2 apply dis effect (target iz eithr immune 2 effects, or has somethin strongr)", + "commands.effect.give.success.multiple": "%s targitz ar gunnu have %s", + "commands.effect.give.success.single": "Appoled efekt %s tO %s", + "commands.enchant.failed": "nothin changd, targets eithr has no item in their hanz or teh enchantment cud not be applid", + "commands.enchant.failed.entity": "%s iz not valid entity 4 dis command", + "commands.enchant.failed.incompatible": "%s cennot seppurt thet megic", + "commands.enchant.failed.itemless": "%s s nut hulding item", + "commands.enchant.failed.level": "%s iz highr than teh maximum level ov %s supportd by dat enchantment", + "commands.enchant.success.multiple": "Applid inchantmnt %s to %s intitiez", + "commands.enchant.success.single": "Applid inchantmnt %s to %s item", + "commands.execute.blocks.toobig": "2 maini blukz in teh spesified aria (macksimum %s, spesified %s)", + "commands.execute.conditional.fail": "Tiist failured", + "commands.execute.conditional.fail_count": "Tiist failured, count: %s", + "commands.execute.conditional.pass": "Testz Pazzed uwu", + "commands.execute.conditional.pass_count": "Test pasd, count: %s", + "commands.experience.add.levels.success.multiple": "Gev %s uxpeerinz luvlz two %s katz", + "commands.experience.add.levels.success.single": "Gev %s uxpeerinz luvlz two %s", + "commands.experience.add.points.success.multiple": "Gev %s uxpeerinz puhnts two %s katz", + "commands.experience.add.points.success.single": "Gev %s uxpeerinz puhnts two %s", + "commands.experience.query.levels": "%s haz %s uxpeerinz luvlz", + "commands.experience.query.points": "%s haz %s uxpeerinz puhnts", + "commands.experience.set.levels.success.multiple": "Sat %s uxpeerinz luvlz on %s playurz", + "commands.experience.set.levels.success.single": "Sat %s uxpeerinz luvlz on %s", + "commands.experience.set.points.invalid": "cant set experience points aboov teh maximum points 4 da kitteh current level", + "commands.experience.set.points.success.multiple": "Sat %s uxpeerinz puhnts on %s katz", + "commands.experience.set.points.success.single": "Sat %s uxpeerinz puhnts on %s", + "commands.fill.failed": "no blockz wuz filld", + "commands.fill.success": "Suxexfuly fild %s blox", + "commands.fill.toobig": "2 maini blukz in teh spesified aria (macksimum %s, spesified %s)", + "commands.forceload.added.failure": "No pieces wre markd for furce looding", + "commands.forceload.added.multiple": "Merked %s pieces in %s frum %s 2 %s 2 to be furce loded", + "commands.forceload.added.none": "A furce loded piece ws fund in et: %s", + "commands.forceload.added.single": "Merked pieces %s in %s 2 be furce looded", + "commands.forceload.list.multiple": "%s furce looded pieces wer fund in %s at: %s", + "commands.forceload.list.single": "A furce loded piece ws fund in %s et: %s", + "commands.forceload.query.failure": "Piece et %s in %s is nut merked fur furce loding", + "commands.forceload.query.success": "Piece et %s in %s is merked fur furce loding", + "commands.forceload.removed.all": "Unmerked al furce looded pieces in %s", + "commands.forceload.removed.failure": "Nu pieces wer removd frum furce looding", + "commands.forceload.removed.multiple": "Unmerked %s pieces inn %s frm %s 2 %s fr furce looding", + "commands.forceload.removed.single": "Unmerked piece %s in %s for furce lodig", + "commands.forceload.toobig": "2 maini blukz in teh spesified aria (macksimum %s, spesified %s)", + "commands.function.success.multiple": "Xcutd %s comandz frum %s funkshunz", + "commands.function.success.single": "Xcutd %s comandz frum funkshun %s", + "commands.gamemode.success.other": "Set %s's gaem moed 2 %s", + "commands.gamemode.success.self": "Set awn gaem moed 2 %s", + "commands.gamerule.query": "Gemrul %s iz set to: %s", + "commands.gamerule.set": "Gemrul %s iz now set to: %s", + "commands.give.failed.toomanyitems": "Cant givez moar dan %s off %s", + "commands.give.success.multiple": "Gev %s %s to %s kities", + "commands.give.success.single": "Givn %s %s 2 %s", + "commands.help.failed": "unknown command or insufficient permishuns", + "commands.item.block.set.success": "Replased a slot att %s, %s, %s wit %s", + "commands.item.entity.set.success.multiple": "Replacd slot on %s intitiez wif %s", + "commands.item.entity.set.success.single": "Replaedz a sluut on %s wif %s", + "commands.item.source.no_such_slot": "Teh target doez not has slot %s", + "commands.item.source.not_a_container": "Sors bluk at %s, %s, %s iz nawt a containr", + "commands.item.target.no_changed.known_item": "Naw tawgetz welcmd itemz %s intu slot %s", + "commands.item.target.no_changes": "Neh targeets hassnt aceptd item in toslot %s", + "commands.item.target.no_such_slot": "Da targit duzent has slot %s", + "commands.item.target.not_a_container": "Bluk at %s, %s, %s iz nawt a containr", + "commands.jfr.dump.failed": "JFR profawlllin faild to trash recawrd: %s", + "commands.jfr.start.failed": "JFR profawlllin reawly messd up cos fo CATZ", + "commands.jfr.started": "JFR profawlllin startd wiht CATZ", + "commands.jfr.stopped": "JFR profawlllin stopd and thrown by kittn to %s", + "commands.kick.success": "Shun %s out of da houz: %s", + "commands.kill.success.multiple": "%s tings put to slep foreva", + "commands.kill.success.single": "Killd %s", + "commands.list.nameAndId": "%s (%s)", + "commands.list.players": "Der r %s of a max of %s kities in da houz: %s", + "commands.locate.biome.invalid": "Dere iz no bioem wif typ \"%s\"", + "commands.locate.biome.not_found": "No kan findz bioem liek \"%s\" in resunabl ranj", + "commands.locate.biome.success": "Da nerest %s iz at %s (%s stepz fur)", + "commands.locate.poi.invalid": "Dere iz nah POI wit taip \"%s\"", + "commands.locate.poi.not_found": "no kan findz intewest wit da typ \"%s\" near kitteh", + "commands.locate.poi.success": "Da nerest %s iz at %s (%s stepz fur)", + "commands.locate.structure.invalid": "Kitteh cant find da strooktur wif taip \"%s\"", + "commands.locate.structure.not_found": "Kitteh culdnt find strooktur of taip \"%s\" neerby", + "commands.locate.structure.success": "Da nerest %s iz at %s (%s stepz fur)", + "commands.message.display.incoming": "%s meowz at u: %s", + "commands.message.display.outgoing": "You meow to %s: %s", + "commands.op.failed": "nothin changd, teh kitteh iz already an operator", + "commands.op.success": "Med %s a alfa kiten", + "commands.pardon.failed": "nothin changd, teh kitteh isnt bannd", + "commands.pardon.success": "Unbeaned %s", + "commands.pardonip.failed": "nothin changd, dat ip isnt bannd", + "commands.pardonip.invalid": "invalid ip addres", + "commands.pardonip.success": "Unbeaned IP %s", + "commands.particle.failed": "teh particle wuz not visible 4 anybody", + "commands.particle.success": "Showin purrtikle %s", + "commands.perf.alreadyRunning": "Teh performens profilr r alreedy startd", + "commands.perf.notRunning": "Teh performens profilr hasnt startd", + "commands.perf.reportFailed": "Faild 2 maek Bug reprort", + "commands.perf.reportSaved": "Bugs re nau in %s", + "commands.perf.started": "Startd 10 secon performens profilin runed (us '/perf stop' 2 stop eerly)", + "commands.perf.stopped": "Stoppd performens profilin aftr %s secondz an %s tikz (%s tikz pr secund)", + "commands.place.feature.failed": "Kitteh tryd so hard but culdnt place fetur", + "commands.place.feature.invalid": "Dere iz nah featur wit taip \"%s\"", + "commands.place.feature.success": "Plaised da \"%s\" at %s, %s, %s", + "commands.place.jigsaw.failed": "Spon jigsou reawly messd up cos fo CATZ", + "commands.place.jigsaw.invalid": "Dere iz nah templete pul wit taip \"%s\"", + "commands.place.jigsaw.success": "Spond jigsou @ %s, %s, %s", + "commands.place.structure.failed": "Kitteh tryd so hard but culdnt place structur", + "commands.place.structure.invalid": "Kitteh cant find da strooktur wif taip \"%s\"", + "commands.place.structure.success": "Spond structur \"%s\" @ %s, %s, %s", + "commands.place.template.failed": "Kitteh tryd so hard but culdnt place teemplet", + "commands.place.template.invalid": "Dere iz nah teemplete wit typ \"%s", + "commands.place.template.success": "Kitteh made da teemplete \"%s\" at %s, %s, %s", + "commands.playsound.failed": "teh sound iz 2 far away 2 be herd", + "commands.playsound.success.multiple": "Playd sund %s to %s kitiez", + "commands.playsound.success.single": "Makd noize %s 2 %s", + "commands.publish.alreadyPublished": "Kittenzgame is elreadi hsted 0n prt %s", + "commands.publish.failed": "Unabl 2 hust locul gaem", + "commands.publish.started": "Lucl gaem hustd on port %s", + "commands.publish.success": "Yurw wurld is naw hawsted on powrt %s", + "commands.recipe.give.failed": "no new recipez wuz lernd", + "commands.recipe.give.success.multiple": "Gott %s resapeez 4 %s peepz", + "commands.recipe.give.success.single": "Gott %s resapeez 4 %s", + "commands.recipe.take.failed": "no recipez cud be forgotten", + "commands.recipe.take.success.multiple": "Took %s resapeez from %s katz", + "commands.recipe.take.success.single": "Took %s resapeez from %s", + "commands.reload.failure": "Relod iz fail! Keepin old stuffz", + "commands.reload.success": "Reloadin!", + "commands.save.alreadyOff": "Savin iz already turnd off", + "commands.save.alreadyOn": "Savin iz already turnd on", + "commands.save.disabled": "Robot savingz iz no-no", + "commands.save.enabled": "Robot savingz iz yes-yes", + "commands.save.failed": "unable 2 save teh game (iz thar enough disk space?)", + "commands.save.saving": "Savingz teh gamez (U hav 2 wate)", + "commands.save.success": "Saved da gamez", + "commands.schedule.cleared.failure": "Nu enrollments called id %s", + "commands.schedule.cleared.success": "Removed %s programmes by the name of id %s", + "commands.schedule.created.function": "Sceduled function '%s' in %s tiks at gemtime %s", + "commands.schedule.created.tag": "Sceduled teg '%s' in %s tiks at gemtime %s", + "commands.schedule.same_tick": "Dats 2 sun i cant maek it", + "commands.scoreboard.objectives.add.duplicate": "an objectiv already exists by dat naym", + "commands.scoreboard.objectives.add.success": "Made new goalz %s", + "commands.scoreboard.objectives.display.alreadyEmpty": "nothin changd, dat display slot iz already empty", + "commands.scoreboard.objectives.display.alreadySet": "nothin changd, dat display slot iz already showin dat objectiv", + "commands.scoreboard.objectives.display.cleared": "No moar goalzez in shownin' spot %s", + "commands.scoreboard.objectives.display.set": "Made shownin' spot %s shownin' goalz %s", + "commands.scoreboard.objectives.list.empty": "Ther R no objectivez", + "commands.scoreboard.objectives.list.success": "Ther R %s goalzez: %s", + "commands.scoreboard.objectives.modify.displayname": "%s now reeds liek %s", + "commands.scoreboard.objectives.modify.rendertype": "Chengd how objectiv %s is drawd", + "commands.scoreboard.objectives.remove.success": "Tuk away goalz %s", + "commands.scoreboard.players.add.success.multiple": "Added %s 2 %s 4 %s thingyz", + "commands.scoreboard.players.add.success.single": "Added %s 2 %s 4 %s (naow %s)", + "commands.scoreboard.players.enable.failed": "nothin changd, dat triggr iz already enabld", + "commands.scoreboard.players.enable.invalid": "Enable only werkz on triggr-objectivez", + "commands.scoreboard.players.enable.success.multiple": "Tigger %s 4 %s thingyz is yes-yes", + "commands.scoreboard.players.enable.success.single": "Enabuled trigur %s 4 %s", + "commands.scoreboard.players.get.null": "Cantt gt valu of %s fur %s; nun is set", + "commands.scoreboard.players.get.success": "%s haz %s %s", + "commands.scoreboard.players.list.empty": "Ther R stalkd entitiz", + "commands.scoreboard.players.list.entity.empty": "%s haz no pointz 4 shownin'", + "commands.scoreboard.players.list.entity.entry": "%s: %s", + "commands.scoreboard.players.list.entity.success": "%s haz %s scores:", + "commands.scoreboard.players.list.success": "Ther R %s stalkd entitiez: %s", + "commands.scoreboard.players.operation.success.multiple": "Updatd %s 4 %s entitiez", + "commands.scoreboard.players.operation.success.single": "Set %s four %s two %s", + "commands.scoreboard.players.remove.success.multiple": "Tuk %s frum %s 4 %s thingyz", + "commands.scoreboard.players.remove.success.single": "Tuk %s frum %s 4 %s (naow %s)", + "commands.scoreboard.players.reset.all.multiple": "Start pointzez over 4 %s thingyz", + "commands.scoreboard.players.reset.all.single": "Start pointzez over 4 %s", + "commands.scoreboard.players.reset.specific.multiple": "Start %s over 4 %s thingyz", + "commands.scoreboard.players.reset.specific.single": "Start %s over 4 %s", + "commands.scoreboard.players.set.success.multiple": "Set %s 4 %s thingyz 2 %s", + "commands.scoreboard.players.set.success.single": "Set %s 4 %s 2 %s", + "commands.seed.success": "Seed: %s", + "commands.setblock.failed": "Cud not set teh block", + "commands.setblock.success": "Changd teh blok at %s, %s, %s", + "commands.setidletimeout.success": "Teh slow cat go out in %s minitz", + "commands.setworldspawn.success": "I has movd big bed tu %s, %s, %s [%s]", + "commands.spawnpoint.success.multiple": "Set kat home 2 %s, %s, %s [%s] in %s 4 %s playrz", + "commands.spawnpoint.success.single": "Set kat home 2 %s, %s, %s [%s] in %s 4 %s", + "commands.spectate.not_spectator": "%s is not lurkin arund", + "commands.spectate.self": "Cant wach urself", + "commands.spectate.success.started": "Now lukin at %s", + "commands.spectate.success.stopped": "Not lookin at anythign anymoar", + "commands.spreadplayers.failed.entities": "Culd not spred %s entits arund %s, %s (tuu meny entitsss fur space - try using spred of at most %s)", + "commands.spreadplayers.failed.invalid.height": "Dat maxHeight %s doeznt wurk; ekzpekted highar dan wurld mimimum %s", + "commands.spreadplayers.failed.teams": "Culd nut spred %s tems arund %s, %s (tu manie entitis fur spaze - try usin spred of et most %s)", + "commands.spreadplayers.success.entities": "Spred %s kats aroun %s, %s wif an average distens for %s blokz apart", + "commands.spreadplayers.success.teams": "Spred %s teemz aroun %s, %s wif an average distens for %s blokz apart", + "commands.stop.stopping": "Stoppin teh servr", + "commands.stopsound.success.source.any": "Stopd all teh sundz %s", + "commands.stopsound.success.source.sound": "Stopt soundz '%s\" on sourzz '%s'", + "commands.stopsound.success.sourceless.any": "Stopd all teh sundz", + "commands.stopsound.success.sourceless.sound": "Stupped sound %s", + "commands.summon.failed": "Unable 2 summon enkitty", + "commands.summon.failed.uuid": "Unebel 2 sunon dis entity cuz sam cat id", + "commands.summon.invalidPosition": "Kitteh canot pops into existnz ther", + "commands.summon.success": "Summzund new %s", + "commands.tag.add.failed": "target eithr already has teh tag or has 2 lotz da tags", + "commands.tag.add.success.multiple": "Addd tag '%s' to %s intitiez", + "commands.tag.add.success.single": "Addd tag '%s' to %s", + "commands.tag.list.multiple.empty": "Ther r no tahz on da %s entitiz", + "commands.tag.list.multiple.success": "Teh %s intitiez haz %s totel tags: %s", + "commands.tag.list.single.empty": "%s haz no tagzz", + "commands.tag.list.single.success": "%s haz %s tagz: %s", + "commands.tag.remove.failed": "Target doez not has dis tag", + "commands.tag.remove.success.multiple": "Tuk tag '%s' frum %s intitiez", + "commands.tag.remove.success.single": "Removd tag '%s' frum %s", + "commands.team.add.duplicate": "a team already exists by dat naym", + "commands.team.add.success": "Created Kitteh Team %s", + "commands.team.empty.success": "Removd %s kats frum teem %s", + "commands.team.empty.unchanged": "nothin changd, dat team iz already empty", + "commands.team.join.success.multiple": "Added %s kats to teemz %s", + "commands.team.join.success.single": "Added %s 2 teemz %s", + "commands.team.leave.success.multiple": "Kickd out %s kats frum any teamz", + "commands.team.leave.success.single": "Kickd out %s frum any teemz", + "commands.team.list.members.empty": "Ther iz no kats on teem %s", + "commands.team.list.members.success": "Teem %s haz %s katz: %s", + "commands.team.list.teams.empty": "There r no beanz", + "commands.team.list.teams.success": "Ther iz %s teems: %s", + "commands.team.option.collisionRule.success": "Bumpy rulez 4 teem %s iz naow \"%s\"", + "commands.team.option.collisionRule.unchanged": "Nothin changd, collishun rule iz already dat value", + "commands.team.option.color.success": "Updatd teh colr fr teem %s to %s", + "commands.team.option.color.unchanged": "Nothin changd, dat team already has dat color", + "commands.team.option.deathMessageVisibility.success": "Dying memoz shownin' 4 teem %s iz naow \"%s\"", + "commands.team.option.deathMessageVisibility.unchanged": "Nothin changd, death mesage visibility iz already dat value", + "commands.team.option.friendlyfire.alreadyDisabled": "nothin changd, friendly fire iz already disabld 4 dat team", + "commands.team.option.friendlyfire.alreadyEnabled": "Nothin changd, friendly fire iz already enabld 4 dat team", + "commands.team.option.friendlyfire.disabled": "Disabld frendli fire fr teem %s", + "commands.team.option.friendlyfire.enabled": "Inabld frendli fire fr teem %s", + "commands.team.option.name.success": "%s haz got new naem", + "commands.team.option.name.unchanged": "Nothin changd. Dat team already has dat naym", + "commands.team.option.nametagVisibility.success": "Nemetag visibiliti fr teem %s r now \"%s\"", + "commands.team.option.nametagVisibility.unchanged": "nothin changd, nametag visibility iz already dat value", + "commands.team.option.prefix.success": "tem prfix set 2 %s", + "commands.team.option.seeFriendlyInvisibles.alreadyDisabled": "nothin changd, dat team already cant c invisable teammatez", + "commands.team.option.seeFriendlyInvisibles.alreadyEnabled": "Nothin changd, dat team can already c invisable teammatez", + "commands.team.option.seeFriendlyInvisibles.disabled": "Teem %s can no longr se envisibl teemmatez", + "commands.team.option.seeFriendlyInvisibles.enabled": "Teem %s can now se envisibl teemmatez", + "commands.team.option.suffix.success": "tem sufx sot 2 %s", + "commands.team.remove.success": "Remoovd teem %s", + "commands.teammsg.failed.noteam": "Ur muzt be on a teem 2 mesage ur teem", + "commands.teleport.invalidPosition": "Kitteh canot zaps tu ther", + "commands.teleport.success.entity.multiple": "Teleportd %s entitez two %s", + "commands.teleport.success.entity.single": "Teleportd %s 2 %s", + "commands.teleport.success.location.multiple": "Teleportd %s intitiez to %s, %s, %s", + "commands.teleport.success.location.single": "Teleportd %s tu %s, %s, %s", + "commands.time.query": "The tiem is %s", + "commands.time.set": "Taim travld 2 %s", + "commands.title.cleared.multiple": "Cleerd titlez fr %s kittiez", + "commands.title.cleared.single": "Deleetd Nams for %s", + "commands.title.reset.multiple": "Reset titl optionz fr %s kittiez", + "commands.title.reset.single": "Reset titl optionz fr %s", + "commands.title.show.actionbar.multiple": "Showin new actionbar titl fr %s kittiez", + "commands.title.show.actionbar.single": "Showin new actionbar titl fr %s", + "commands.title.show.subtitle.multiple": "Showin new subtitl fr %s kittiez", + "commands.title.show.subtitle.single": "Showin new subtitl fr %s", + "commands.title.show.title.multiple": "Showin new titl fr %s kittiez", + "commands.title.show.title.single": "Showin new titl fr %s", + "commands.title.times.multiple": "Changd titl displai timez fr %s kittiez", + "commands.title.times.single": "Changd titl displai timez fr %s", + "commands.trigger.add.success": "Tiggerd %s (added %s 2 numburz)", + "commands.trigger.failed.invalid": "u can only triggr objectivez dat r triggr type", + "commands.trigger.failed.unprimed": "u cant triggr dis objectiv yet", + "commands.trigger.set.success": "Tiggerd %s (made numburz %s)", + "commands.trigger.simple.success": "Tiggerd %s", + "commands.weather.set.clear": "Rainz R off", + "commands.weather.set.rain": "Quiet rainz R on", + "commands.weather.set.thunder": "Laoud rainz R on", + "commands.whitelist.add.failed": "cat iz already whitelistd", + "commands.whitelist.add.success": "Whitlist now haz %s", + "commands.whitelist.alreadyOff": "whitelist iz already turnd off", + "commands.whitelist.alreadyOn": "whitelist iz already turnd on", + "commands.whitelist.disabled": "Witlist off :(!!!", + "commands.whitelist.enabled": "Witlist now on boi", + "commands.whitelist.list": "Ther R %s kats in teh exklusiv clubz: %s", + "commands.whitelist.none": "Ther R no kats in teh exklusiv clubz", + "commands.whitelist.reloaded": "Reloadd teh whitelist", + "commands.whitelist.remove.failed": "cat iz not whitelistd", + "commands.whitelist.remove.success": "Removd %s frum teh whitelist", + "commands.worldborder.center.failed": "nothin changd, teh wurld bordr iz already senterd thar", + "commands.worldborder.center.success": "Set teh centr for teh world bordr to %s, %s", + "commands.worldborder.damage.amount.failed": "nothin changd, teh wurld bordr damage iz already dat amount", + "commands.worldborder.damage.amount.success": "Set teh wurld bordr damage tiem 2 %s purr blok evry second", + "commands.worldborder.damage.buffer.failed": "Nothin changd, teh wurld bordr damage buffr iz already dat distance", + "commands.worldborder.damage.buffer.success": "Set teh world bordr damage buffr to %s blokz", + "commands.worldborder.get": "Teh world bordr currentle r %s blokz wide", + "commands.worldborder.set.failed.big": "Wurld bordr cant b biggr den %s blokz wide", + "commands.worldborder.set.failed.far": "Wurld bordr cant b moar away den %s blokz", + "commands.worldborder.set.failed.nochange": "nothin changd, teh wurld bordr iz already dat size", + "commands.worldborder.set.failed.small": "Da wrold border canot bee smaler thn 1 block wide", + "commands.worldborder.set.grow": "Growin teh world bordr to %s blokz wide ovr %s secondz", + "commands.worldborder.set.immediate": "Set teh wurld bordr 2 %s blockz wide", + "commands.worldborder.set.shrink": "Shtinkin teh world bordr to %s blokz wide ovr %s secondz", + "commands.worldborder.warning.distance.failed": "nothin changd, teh wurld bordr warnin iz already dat distance", + "commands.worldborder.warning.distance.success": "Set teh world bordr warnin distens to %s secondz", + "commands.worldborder.warning.time.failed": "nothin changd, teh wurld bordr warnin iz already dat amount ov tiem", + "commands.worldborder.warning.time.success": "Set teh world bordr warnin time to %s secondz", + "compliance.playtime.greaterThan24Hours": "U was playin for moar dan 24 hourz", + "compliance.playtime.hours": "Yu haz bin pleyin fur %s aur(s)", + "compliance.playtime.message": "GO OUTSIED N HAV A LIF", + "connect.aborted": "Abort!!", + "connect.authorizing": "Makin sure it's safe...", + "connect.connecting": "Buildin catwalk 2 teh servr...", + "connect.encrypting": "Encriipthing...", + "connect.failed": "Not today... :(", + "connect.joining": "Cat iz comming tu wourld...", + "connect.negotiating": "NiGuZiatInj...", + "container.barrel": "Fish box", + "container.beacon": "Bacon", + "container.blast_furnace": "BlAsT FuRnAcE", + "container.brewing": "Bubbleh", + "container.cartography_table": "Cartografy Table", + "container.chest": "Kat Box", + "container.chestDouble": "Exttra Bigg Cat Box", + "container.crafting": "Makezing", + "container.creative": "Grabbeh Stuff", + "container.dispenser": "Dizpnzur", + "container.dropper": "DRUPPER", + "container.enchant": "Makeh shineh", + "container.enchant.clue": "%s wat?", + "container.enchant.lapis.many": "%s blu stuffz", + "container.enchant.lapis.one": "1 blu stuffz", + "container.enchant.level.many": "%s shineh levls", + "container.enchant.level.one": "1 shineh stick", + "container.enchant.level.requirement": "Lvl neded: %s", + "container.enderchest": "sp00ky Litterbox", + "container.furnace": "kat sleeps her", + "container.grindstone_title": "Fix it & Remove za shine", + "container.hopper": "RUN VACUUM!", + "container.inventory": "Mah stuff", + "container.isLocked": "Oh noes! %s woent open!", + "container.lectern": "Lectrn", + "container.loom": "L\u00f6\u00f6m", + "container.repair": "Fixeh & Nameh", + "container.repair.cost": "Shineh Levl Cost: %1$s", + "container.repair.expensive": "2 Expenciv!", + "container.shulkerBox": "Shulker Bux", + "container.shulkerBox.more": "& %s moar...", + "container.smoker": "Za Smoker", + "container.spectatorCantOpen": "kant opn cuz thr aint no cheezburgers yet", + "container.stonecutter": "Shrpy movin thingy", + "container.upgrade": "Upgraed Geer", + "controls.keybinds": "Kee Blinds...", + "controls.keybinds.title": "Key Bindz", + "controls.reset": "Rezet", + "controls.resetAll": "Rezet Keyz", + "controls.title": "Controlz", + "createWorld.customize.buffet.biome": "Pwease pik baium", + "createWorld.customize.buffet.title": "Bufet Wurld Kustemizaeshun", + "createWorld.customize.custom.baseSize": "deep beas siez", + "createWorld.customize.custom.biomeDepthOffset": "baium deep ofset", + "createWorld.customize.custom.biomeDepthWeight": "lolztype depth weight", + "createWorld.customize.custom.biomeScaleOffset": "baium scael ofset", + "createWorld.customize.custom.biomeScaleWeight": "baium scael weigt", + "createWorld.customize.custom.biomeSize": "baium siez", + "createWorld.customize.custom.center": "centr tallnes", + "createWorld.customize.custom.confirm1": "Dis shal owerwite ur curent", + "createWorld.customize.custom.confirm2": "setinz and u cant undo.", + "createWorld.customize.custom.confirmTitle": "Uh oh!", + "createWorld.customize.custom.coordinateScale": "moar numbrz thingy", + "createWorld.customize.custom.count": "spahn triez", + "createWorld.customize.custom.defaults": "da basikz", + "createWorld.customize.custom.depthNoiseScaleExponent": "deep noisy thingy", + "createWorld.customize.custom.depthNoiseScaleX": "deep soundy thing x", + "createWorld.customize.custom.depthNoiseScaleZ": "deep soundy thing z", + "createWorld.customize.custom.dungeonChance": "numbrz of scaries", + "createWorld.customize.custom.fixedBiome": "baium", + "createWorld.customize.custom.heightScale": "tallnes thingy", + "createWorld.customize.custom.lavaLakeChance": "numbrz of spicie nopes", + "createWorld.customize.custom.lowerLimitScale": "basement max scael", + "createWorld.customize.custom.mainNoiseScaleX": "soundy thing x", + "createWorld.customize.custom.mainNoiseScaleY": "soundy thing y", + "createWorld.customize.custom.mainNoiseScaleZ": "soundy thing z", + "createWorld.customize.custom.maxHeight": "Max. tallnes", + "createWorld.customize.custom.minHeight": "Min. tallnes", + "createWorld.customize.custom.next": "go ferward plz", + "createWorld.customize.custom.page0": "eazy customizashuns", + "createWorld.customize.custom.page1": "Setinz 4 Oer", + "createWorld.customize.custom.page2": "Advanses Customizashuns (SMART KITTEHS ONLEE!)", + "createWorld.customize.custom.page3": "REELY ADVANSES CUSTOMIZASHUNS (SMART KITTEHS ONLEE!)", + "createWorld.customize.custom.preset.caveChaos": "Caevz ov Kaeyos", + "createWorld.customize.custom.preset.caveDelight": "Cavurz Dilite", + "createWorld.customize.custom.preset.drought": "No watr :(", + "createWorld.customize.custom.preset.goodLuck": "Meow", + "createWorld.customize.custom.preset.isleLand": "Isle Land", + "createWorld.customize.custom.preset.mountains": "Mauntin Craezines", + "createWorld.customize.custom.preset.waterWorld": "Moist Wurld", + "createWorld.customize.custom.presets": "Presuts", + "createWorld.customize.custom.presets.title": "Custmiz Wurld Presuts", + "createWorld.customize.custom.prev": "go back plz", + "createWorld.customize.custom.randomize": "RANDUMIZE", + "createWorld.customize.custom.riverSize": "rivr siez", + "createWorld.customize.custom.seaLevel": "Watr lvl", + "createWorld.customize.custom.size": "spahn siez", + "createWorld.customize.custom.spread": "spred tallnes", + "createWorld.customize.custom.stretchY": "squeeze teh tallnes", + "createWorld.customize.custom.upperLimitScale": "ceiling max scael", + "createWorld.customize.custom.useCaves": "Caevz", + "createWorld.customize.custom.useDungeons": "scaries", + "createWorld.customize.custom.useLavaLakes": "spiecie nopes", + "createWorld.customize.custom.useLavaOceans": "big spicy nope", + "createWorld.customize.custom.useMansions": "Land of Wood Manshuns", + "createWorld.customize.custom.useMineShafts": "mein zhaftsd", + "createWorld.customize.custom.useMonuments": "fisheh houzez", + "createWorld.customize.custom.useOceanRuins": "Oo wator ruine!!!!??!", + "createWorld.customize.custom.useRavines": "spooky holez", + "createWorld.customize.custom.useStrongholds": "kitteh towurz", + "createWorld.customize.custom.useTemples": "hooman shrinez", + "createWorld.customize.custom.useVillages": "hooman townz", + "createWorld.customize.custom.useWaterLakes": "watr laekz", + "createWorld.customize.custom.waterLakeChance": "numbrz of watr laekz", + "createWorld.customize.flat.height": "tallnes", + "createWorld.customize.flat.layer": "%s", + "createWorld.customize.flat.layer.bottom": "Battom - %s", + "createWorld.customize.flat.layer.top": "High thingy - %s", + "createWorld.customize.flat.removeLayer": "Deleet Layr", + "createWorld.customize.flat.tile": "Layr materialz", + "createWorld.customize.flat.title": "SUPER FLAT CUSTOMIZ", + "createWorld.customize.presets": "Presuts", + "createWorld.customize.presets.list": "Human's presuts lolz!", + "createWorld.customize.presets.select": "Use presut", + "createWorld.customize.presets.share": "SHAR UR STOOF!?1? JUST PUNCH BOX!!!!1111!\n", + "createWorld.customize.presets.title": "Select a presut", + "createWorld.preparing": "Cat god iz preparin ur wurld...", + "dataPack.title": "Selecc data packz", + "dataPack.validation.back": "Go Bacc", + "dataPack.validation.failed": "Data pacc validashun fayld!", + "dataPack.validation.reset": "Rezet 2 defawlt", + "dataPack.validation.working": "Validatin selectd data packz...", + "dataPack.vanilla.description": "Teh uzual infoz", + "datapackFailure.safeMode": "Safty moed", + "datapackFailure.title": "Errurs in nau chusen datapak maek wurld no loed. U can loed vanila datapak (\"Safty moed\") or go bak tu titol screhn and fix manuelly.", + "death.attack.genericKill":"%1$s ded", + "death.attack.anvil": "%1$s was squazhd by a falln anvehl", + "death.attack.anvil.player": "%1$s was kille by anvul from sky whil protec from %2$s", + "death.attack.arrow": "%1$s was shot by %2$s", + "death.attack.arrow.item": "%1$s was shot by %2$s usin %3$s", + "death.attack.badRespawnPoint.link": "Intnesional game desin", + "death.attack.badRespawnPoint.message": "%1$s was kill by %2$s", + "death.attack.cactus": "%1$s wuz prickd 2 death", + "death.attack.cactus.player": "%1$s walkd intu a spiky green plant whilst tryin 2 escaep %2$s", + "death.attack.cramming": "%1$s gut turnd intu mashd potato", + "death.attack.cramming.player": "%1$s wus skwash by %2$s", + "death.attack.dragonBreath": "%1$s wuz burnt in dragunish puff", + "death.attack.dragonBreath.player": "%1$s wuz burnt in dragunish puff bai %2$s", + "death.attack.drown": "%1$s drownd when dey took a bath", + "death.attack.drown.player": "%1$s drownd whilst tryin 2 escape %2$s", + "death.attack.dryout": "%1$s ded from dehideration", + "death.attack.dryout.player": "%1$s ded from dehideration whils tryin 2 escape %2$s", + "death.attack.even_more_magic": "%1$s iz ded by lotz of magikz", + "death.attack.explosion": "%1$s xploded", + "death.attack.explosion.player": "%1$s waz xploded by %2$s", + "death.attack.explosion.player.item": "%1$s was boom by %2$s usin %3$s", + "death.attack.fall": "%1$s hit teh ground 2 hard", + "death.attack.fall.player": "%1$s fell cuz %2$s", + "death.attack.fallingBlock": "%1$s was squazhd by fallin bluk", + "death.attack.fallingBlock.player": "%1$s was kille by bloc from sky whil protec from %2$s", + "death.attack.fallingStalactite": "%1$s waz kut in half by foling sharp cave rok", + "death.attack.fallingStalactite.player": "%1$s waz kut in half by foling sharp cave rok whil scratchin at %2$s", + "death.attack.fireball": "%1$s was fierballd by %2$s", + "death.attack.fireball.item": "%1$s was fierballd %2$s usin %3$s", + "death.attack.fireworks": "%1$s iz ded cuz BOOM", + "death.attack.fireworks.item": "%1$s exploded cuz a firwork ran awy frum %3$s bie %2$s", + "death.attack.fireworks.player": "%1$s got kill wif firwork whil protecting us frum %2$s", + "death.attack.flyIntoWall": "%1$s flu in2 a wal", + "death.attack.flyIntoWall.player": "%1$s flew 2 wall cuz of %2$s", + "death.attack.freeze": "%1$s waz 2 kold and died", + "death.attack.freeze.player": "%1$s waz 2 kold and died bcuz of %2$s", + "death.attack.generic": "R.I.P %1$s", + "death.attack.generic.player": "%1$s dieded cuz %2$s", + "death.attack.hotFloor": "%1$s fund ut flor was laav", + "death.attack.hotFloor.player": "%1$s gon in dedzone thx 2 %2$s", + "death.attack.inFire": "%1$s walkd in2 fier n dieded", + "death.attack.inFire.player": "%1$s walkd 2 fier wile fiting wif %2$s", + "death.attack.inWall": "%1$s dieded in teh wahls", + "death.attack.inWall.player": "%1$s die in wall whil fite %2$s", + "death.attack.indirectMagic": "%1$s was killd by %2$s usin magikz", + "death.attack.indirectMagic.item": "%1$s was killd by %2$s usin %3$s", + "death.attack.lava": "%1$s thawt thay cud swim in nope", + "death.attack.lava.player": "%1$s treid 2 swim in nope to git away frum %2$s", + "death.attack.lightningBolt": "%1$s waz struck by lightnin", + "death.attack.lightningBolt.player": "%1$s ded by ligtning wen figting %2$s", + "death.attack.magic": "%1$s was killd by magikz", + "death.attack.magic.player": "%1$s wahs skidaddle skadoodled whilst tryin 2 escaep %2$s", + "death.attack.message_too_long": "Da msg wuz 2 long 2 snd fuly. Sry! Hers stripd vrsion: %s", + "death.attack.mob": "%1$s was slain by %2$s", + "death.attack.mob.item": "%1$s was slain by %2$s usin %3$s", + "death.attack.onFire": "%1$s died in a fier", + "death.attack.onFire.item": "%1$s was fiting %2$s wen thay BURND ALIEV wildin %3$s!!!", + "death.attack.onFire.player": "%1$s was fiting %2$s wen thay BURND ALIEV!!!", + "death.attack.outOfWorld": "%1$s fell out ov teh wurld", + "death.attack.outOfWorld.player": "%1$s not want to liv in sam world as %2$s", + "death.attack.player": "%1$s was scretchd bai %2$s", + "death.attack.player.item": "%1$s was slain by %2$s usin %3$s", + "death.attack.sonic_boom": "%1$s was booomed bai a sunically-charged EPIG ANIME ATTEK!!!!!!!~~", + "death.attack.sonic_boom.item": "%1$s was booooomed by a sunically-charged ANIME ATTECK while tring 2 hid from %2$s wildin %3$s", + "death.attack.sonic_boom.player": "%1$s was booooomed by a sunically-charged skreem while trin 2 hid from %2$s", + "death.attack.stalagmite": "%1$s waz hurt bi sharp cave rokk", + "death.attack.stalagmite.player": "%1$s waz hurt bi sharp cave rokk whil scratchin at %2$s", + "death.attack.starve": "%1$s starvd 2 death", + "death.attack.starve.player": "%1$s starvd whil fitghting %2$s", + "death.attack.sting": "%1$s was piereced to DETH", + "death.attack.sting.item": "%1$s wuz poked 2 deth by %2$s usin %3$s", + "death.attack.sting.player": " %2$s piereced %1$s to DETH", + "death.attack.sweetBerryBush": "%1$s was poked to deth by a sweet bery bush", + "death.attack.sweetBerryBush.player": "%1$s was poked to deth by a sweet bery bush whilst trying to escepe %2$s", + "death.attack.thorns": "%1$s was killd tryin 2 hurt %2$s", + "death.attack.thorns.item": "%1$s was killd tryin by %3$s 2 hurt %2$s", + "death.attack.thrown": "%1$s was pumeld by %2$s", + "death.attack.thrown.item": "%1$s was pumeld by %2$s usin %3$s", + "death.attack.trident": "%1$s was vigorously poked by %2$s", + "death.attack.trident.item": "%1$s was imPAled cos of %2$s and iz %3$s", + "death.attack.wither": "%1$s withrd away lol", + "death.attack.wither.player": "%1$s withrd away while protecting us against %2$s", + "death.attack.witherSkull": "%1$s vus shhoott bai 1 skall frem %2$s", + "death.attack.witherSkull.item": "%1$s wus shhoott bai 1 skall frem %2$s usin %3$s", + "death.fell.accident.generic": "%1$s fell frum high place", + "death.fell.accident.ladder": "%1$s fell off laddr an doan landd on fed", + "death.fell.accident.other_climbable": "%1$s fell whil clymbin", + "death.fell.accident.scaffolding": "%1$s dropd frm a climby thing", + "death.fell.accident.twisting_vines": "%1$s kuldnt huld da spyral noodel", + "death.fell.accident.vines": "%1$s fell off sum vinez", + "death.fell.accident.weeping_vines": "%1$s kuldnt huld da sad noodel", + "death.fell.assist": "%1$s wuz doomd 2 fall by %2$s", + "death.fell.assist.item": "%1$s wuz doomd 2 fall by %2$s usin %3$s trying 2 escape da amogus", + "death.fell.finish": "%1$s fell 2 far an wuz finishd by %2$s", + "death.fell.finish.item": "%1$s fell 2 far an wuz finishd by %2$s usin %3$s", + "death.fell.killer": "%1$s waz doomd 2 fall", + "deathScreen.quit.confirm": "R u sure u wants 2 quit?", + "deathScreen.respawn": "Remeow", + "deathScreen.score": "ur pointz", + "deathScreen.spectate": "Spec wurld lol", + "deathScreen.title": "U dies, sad kitteh :c", + "deathScreen.title.hardcore": "Gaem ova, lol", + "deathScreen.titleScreen": "Teh Big Menu", + "debug.advanced_tooltips.help": "F3 + H = Advancd tooltipz", + "debug.advanced_tooltips.off": "Advancd tooltipz: nah", + "debug.advanced_tooltips.on": "Advancd tooltipz: yea", + "debug.chunk_boundaries.help": "F3 + G = maek linez 'round pieczs", + "debug.chunk_boundaries.off": "Chunk line thingys: Nah", + "debug.chunk_boundaries.on": "Chunk line thingys: Yea", + "debug.clear_chat.help": "F3 + D = forget wat every1 is sayin", + "debug.copy_location.help": "f3 + 3 = copi locatoin as /tp command, hold f3 + c to mak gam go pasta!!", + "debug.copy_location.message": "Coopieed luucation tO clappbirb", + "debug.crash.message": "f3 + c i prssed. dis wil mak gam go pasta unles rilizd", + "debug.crash.warning": "Stup guorkin in %s...", + "debug.creative_spectator.error": "U shall nawt chaeng ur gaemmode!", + "debug.creative_spectator.help": "F3 + N = Chaenge gaemmode <-> spetaror", + "debug.gamemodes.error": "Uh oh, no swichin permishunz", + "debug.gamemodes.help": "f3 and f4 = open cat mood changer", + "debug.gamemodes.press_f4": "[ F4 ]", + "debug.gamemodes.select_next": "%s Nekzt", + "debug.help.help": "F3 + Q = Wat ur lookin at rite nao", + "debug.help.message": "Kei bindunz:", + "debug.inspect.client.block": "Copid client-side block data 2 clipbord", + "debug.inspect.client.entity": "Copid client-side entity data 2 clipbord", + "debug.inspect.help": "F3 + I = Copy entity or blukz data 2 clipboard", + "debug.inspect.server.block": "Copid servr-side block data 2 clipbord", + "debug.inspect.server.entity": "Copid servr-side entity data 2 clipbord", + "debug.pause.help": "F3 + Esc = Paws wifut da menu (cant if cant paws)", + "debug.pause_focus.help": "F3 + P = Paws wen no focusss", + "debug.pause_focus.off": "Paws wen no focus: nah", + "debug.pause_focus.on": "Paws wen no focus: yea", + "debug.prefix": "[Dedog]:", + "debug.profiling.help": "F3 + L = Statr/stup your catt saving", + "debug.profiling.start": "Profilin startd fr %s secundz. Us F3 + L to stop eerle", + "debug.profiling.stop": "The Grand Finaly of Profilin'. saivd rezults too %s", + "debug.reload_chunks.help": "F3 + A = mak all piecz reloed", + "debug.reload_chunks.message": "Reloedin all pieczs", + "debug.reload_resourcepacks.help": "F3 + T = Reloed visualz", + "debug.reload_resourcepacks.message": "Reloeded visualz", + "debug.show_hitboxes.help": "F3 + B = put all stuffz in glas box", + "debug.show_hitboxes.off": "Stuff is in glass boxs: nah", + "debug.show_hitboxes.on": "Stuff is in glass boxs: yea", + "demo.day.1": "Dis cat demo wil lust 5 gaem daez, so do ur best!", + "demo.day.2": "DAI 2", + "demo.day.3": "DAI 3", + "demo.day.4": "DAI 4", + "demo.day.5": "DIS UR LAST DAI!!!!!", + "demo.day.6": "U have pasd ur 5th dae. Uz %s 2 saev a screenshawt of ur kreashun.", + "demo.day.warning": "UR TIEM IZ ALMOST UP!", + "demo.demoExpired": "Ur dmo haz run out of kittehs!", + "demo.help.buy": "Buy nao!", + "demo.help.fullWrapped": "Dis demo's gunna last 5 in-gaem-daez (bout 1 oure nd 40 minits of kitteh tiem). Chevk le advaensmens 4 hintz! Haev fun!", + "demo.help.inventory": "PRES %1$s 2 LUK AT UR STUFF", + "demo.help.jump": "JUMP BI PRESING %1$s-key", + "demo.help.later": "Go on playin!", + "demo.help.movement": "UZ %1$s, %2$s, %3$s, %4$s N TASTI MOUZEZ 2 MOVE ARUND", + "demo.help.movementMouse": "LUK ARUND USIN TEH MOUZ", + "demo.help.movementShort": "MOV BI PRESING %1$s, %2$s, %3$s N %4$s", + "demo.help.title": "DMO MOED LOL", + "demo.remainingTime": "REMENING TIEM: %s", + "demo.reminder": "Za demo tiem haz ekspird. Buy da gaem 2 kontinu or start 1 new wurld!", + "difficulty.lock.question": "R u sure u wants 2 lock teh difficulty ov dis wurld ? Dis will set dis wurld 2 always be %1$s,na u will nevr be able 2 change dat again!", + "difficulty.lock.title": "Lock Wurld Difficulty", + "disconnect.closed": "Cat clozed konecticon", + "disconnect.disconnected": "U left teh catwalk", + "disconnect.endOfStream": "Ent ov striam", + "disconnect.exceeded_packet_rate": "Kick'd 4 eksidin paket ratd limet", + "disconnect.genericReason": "%s", + "disconnect.kicked": "Ran awy frm ownrz", + "disconnect.loginFailed": "u faild log1n", + "disconnect.loginFailedInfo": "Fled to lug in: %s", + "disconnect.loginFailedInfo.insufficientPrivileges": "Utur kittehz is dizabl, pwease chek ur Mekrosoft akowant setinz.", + "disconnect.loginFailedInfo.invalidSession": "sezzion nawt workz (restart ur gaem & lawnchr)", + "disconnect.loginFailedInfo.serversUnavailable": "coodnt reach authentikashn servers! plz try again.", + "disconnect.loginFailedInfo.userBanned": "U r banned frum playin online", + "disconnect.lost": "U fell of teh catwalk", + "disconnect.overflow": "butter oveflou", + "disconnect.quitting": "KTHXBYE", + "disconnect.spam": "Meow, sthap spammin'", + "disconnect.timeout": "took 2 long", + "disconnect.unknownHost": "Kitteh doezn't know da hozt", + "editGamerule.default": "Da basikz: %s", + "editGamerule.title": "EDET gaem Rulez", + "effect.effectNotFound": "unknuwn effect: %s", + "effect.minecraft.absorption": "absurbshun", + "effect.minecraft.bad_omen": "Bad kitteh", + "effect.minecraft.blindness": "I cant see anything", + "effect.minecraft.conduit_power": "Kitty powah", + "effect.minecraft.darkness": "Dawkness", + "effect.minecraft.dolphins_grace": "Greis of a Dolphin", + "effect.minecraft.fire_resistance": "Fire Rezistance", + "effect.minecraft.glowing": "Makes U Shiny", + "effect.minecraft.haste": "IM MININ FAST", + "effect.minecraft.health_boost": "10th Life", + "effect.minecraft.hero_of_the_village": "Da Hero ov teh Village", + "effect.minecraft.hunger": "Need nomz", + "effect.minecraft.instant_damage": "Instant Ouch", + "effect.minecraft.instant_health": "insta sheezburgerz", + "effect.minecraft.invisibility": "U cant see meh", + "effect.minecraft.jump_boost": "Bunny cat", + "effect.minecraft.levitation": "Hoverz", + "effect.minecraft.luck": "LOL", + "effect.minecraft.mining_fatigue": "fu wana stehp minin", + "effect.minecraft.nausea": "Sik cat", + "effect.minecraft.night_vision": "Cat Vishun", + "effect.minecraft.poison": "Puizn", + "effect.minecraft.regeneration": "Time Lordz Buffeh", + "effect.minecraft.resistance": "Rezistance", + "effect.minecraft.saturation": "Satshurashun", + "effect.minecraft.slow_falling": "Slowmo fall", + "effect.minecraft.slowness": "fatnes", + "effect.minecraft.speed": "spede", + "effect.minecraft.strength": "Powah", + "effect.minecraft.unluck": "NOT LOL", + "effect.minecraft.water_breathing": "Watr Breathin", + "effect.minecraft.weakness": "Fat cat", + "effect.minecraft.wither": "Wither", + "effect.none": "No Effects to dis cat", + "enchantment.level.1": "I", + "enchantment.level.10": "X", + "enchantment.level.2": "2", + "enchantment.level.3": "3", + "enchantment.level.4": "IV", + "enchantment.level.5": "V", + "enchantment.level.6": "VI", + "enchantment.level.7": "VII", + "enchantment.level.8": "VIII", + "enchantment.level.9": "IX", + "enchantment.minecraft.aqua_affinity": "Kitteh no like water", + "enchantment.minecraft.bane_of_arthropods": "KILL ALL DIS SPIDRZ", + "enchantment.minecraft.binding_curse": "cant taek dis off", + "enchantment.minecraft.blast_protection": "Blast Protecshun", + "enchantment.minecraft.channeling": "Being thor", + "enchantment.minecraft.depth_strider": "Fuzt Watur Wullken", + "enchantment.minecraft.efficiency": "Fuzt Diggin'", + "enchantment.minecraft.feather_falling": "Fall on ur feetz", + "enchantment.minecraft.fire_aspect": "Burn dis thing", + "enchantment.minecraft.fire_protection": "Fier Protecshun", + "enchantment.minecraft.flame": "Flaem", + "enchantment.minecraft.fortune": "Forshun", + "enchantment.minecraft.frost_walker": "cat no liek water hax", + "enchantment.minecraft.impaling": "Idk lmao", + "enchantment.minecraft.infinity": "FOREVERS", + "enchantment.minecraft.knockback": "Nockback", + "enchantment.minecraft.looting": "Steal all dis thingz", + "enchantment.minecraft.loyalty": "BFF", + "enchantment.minecraft.luck_of_the_sea": "Luk ov se zee", + "enchantment.minecraft.lure": "Luer", + "enchantment.minecraft.mending": "Mendin", + "enchantment.minecraft.multishot": "Manysot", + "enchantment.minecraft.piercing": "Errow gous thru", + "enchantment.minecraft.power": "Powir", + "enchantment.minecraft.projectile_protection": "Projektile Protecshun", + "enchantment.minecraft.protection": "Protecshun", + "enchantment.minecraft.punch": "Punsh", + "enchantment.minecraft.quick_charge": "Qwick Charge", + "enchantment.minecraft.respiration": "fish moed", + "enchantment.minecraft.riptide": "COME BACK", + "enchantment.minecraft.sharpness": "Much sharp", + "enchantment.minecraft.silk_touch": "Smooth Diggin'", + "enchantment.minecraft.smite": "Smiet", + "enchantment.minecraft.soul_speed": "rannin on ded peepl", + "enchantment.minecraft.sweeping": "Sweeper Deeper", + "enchantment.minecraft.swift_sneak": "SNEK SPEEDRUN!!", + "enchantment.minecraft.thorns": "Spiky", + "enchantment.minecraft.unbreaking": "Nevr break", + "enchantment.minecraft.vanishing_curse": "wen u getrekt its gon", + "enchantment.unknown": "unknawn enhcantment: %s", + "entity.minecraft.allay": "flyin blu mob", + "entity.minecraft.area_effect_cloud": "Area Effect Cloud\n", + "entity.minecraft.armor_stand": "Stick hooman", + "entity.minecraft.arrow": "ERROW", + "entity.minecraft.axolotl": "KUTE PINK FISHH", + "entity.minecraft.bat": "Batman", + "entity.minecraft.bee": "B", + "entity.minecraft.blaze": "OMG it's made of fier", + "entity.minecraft.boat": "Watr car", + "entity.minecraft.cat": "Kitteh", + "entity.minecraft.cave_spider": "Tine paneful spidur", + "entity.minecraft.chest_boat": "Watr Car wif Cat box", + "entity.minecraft.chest_minecart": "Minecat wif Cat Box", + "entity.minecraft.chicken": "Bawk Bawk!", + "entity.minecraft.cod": "Cot", + "entity.minecraft.command_block_minecart": "Minecat wif Comnd Bluk", + "entity.minecraft.cow": "Milk-Maeker", + "entity.minecraft.creeper": "Creeper", + "entity.minecraft.dolphin": "doolfin", + "entity.minecraft.donkey": "Donkeh", + "entity.minecraft.dragon_fireball": "Dragunish burp", + "entity.minecraft.drowned": "watuur thing", + "entity.minecraft.egg": "Fhrown Egg", + "entity.minecraft.elder_guardian": "BIG LAZUR SHARK", + "entity.minecraft.end_crystal": "Endur Cristal", + "entity.minecraft.ender_dragon": "Dwagon Bos", + "entity.minecraft.ender_pearl": "Frown Ender Perl", + "entity.minecraft.enderman": "Enderman", + "entity.minecraft.endermite": "Endermite", + "entity.minecraft.evoker": "Wizrd", + "entity.minecraft.evoker_fangs": "Evokr fanjz", + "entity.minecraft.experience_bottle": "Thraun potion wif ur levlz", + "entity.minecraft.experience_orb": "Experience Ballz", + "entity.minecraft.eye_of_ender": "teh evil eye", + "entity.minecraft.falling_block": "bb bluk lol", + "entity.minecraft.fireball": "Nope", + "entity.minecraft.firework_rocket": "shiny 'splody thing", + "entity.minecraft.fishing_bobber": "watuur toy", + "entity.minecraft.fox": "Fuxe", + "entity.minecraft.frog": "Toad", + "entity.minecraft.furnace_minecart": "Minecat wif Hot Box", + "entity.minecraft.ghast": "Ghast", + "entity.minecraft.giant": "OMG ZOMBIE 4 DAYZ", + "entity.minecraft.glow_item_frame": "Brite item holdr", + "entity.minecraft.glow_squid": "Shiny skwid", + "entity.minecraft.goat": "monten shep", + "entity.minecraft.guardian": "SHARKS WITH LAZERS", + "entity.minecraft.hoglin": "Hoglin", + "entity.minecraft.hopper_minecart": "Minecat wif hoppez", + "entity.minecraft.horse": "PONY", + "entity.minecraft.husk": "Warm hooman", + "entity.minecraft.illusioner": "Wiizardur", + "entity.minecraft.iron_golem": "Strange Irun Hooman", + "entity.minecraft.item": "Itum", + "entity.minecraft.item_frame": "Kitteh Fraem", + "entity.minecraft.killer_bunny": "Scari jumpin foodz", + "entity.minecraft.leash_knot": "Leesh knot", + "entity.minecraft.lightning_bolt": "litnin bot", + "entity.minecraft.llama": "camel sheep", + "entity.minecraft.llama_spit": "tal goat spit", + "entity.minecraft.magma_cube": "Fier sliem", + "entity.minecraft.marker": "Meowrker", + "entity.minecraft.minecart": "Minecat", + "entity.minecraft.mooshroom": "Mooshroom", + "entity.minecraft.mule": "Donkehpony", + "entity.minecraft.ocelot": "Wild kitteh", + "entity.minecraft.painting": "Art on a paper", + "entity.minecraft.panda": "Green Stick Eatar", + "entity.minecraft.parrot": "Rainbow Bird", + "entity.minecraft.phantom": "Creepy flyin ting", + "entity.minecraft.pig": "Oinkey", + "entity.minecraft.piglin": "Piglin", + "entity.minecraft.piglin_brute": "Piglin Brut", + "entity.minecraft.pillager": "Pilagur", + "entity.minecraft.player": "Cat", + "entity.minecraft.polar_bear": "Wite beer", + "entity.minecraft.potion": "Poshun", + "entity.minecraft.pufferfish": "very yukky fishy", + "entity.minecraft.rabbit": "Jumpin Foodz", + "entity.minecraft.ravager": "Rivagur", + "entity.minecraft.salmon": "Salmon", + "entity.minecraft.sheep": "Baa Baa!", + "entity.minecraft.shulker": "Shulker", + "entity.minecraft.shulker_bullet": "Shulker bullit", + "entity.minecraft.silverfish": "Grae fish", + "entity.minecraft.skeleton": "Spooke scury Skeletun", + "entity.minecraft.skeleton_horse": "Spooke scury Skeletun Hoers", + "entity.minecraft.slime": "Sliem", + "entity.minecraft.small_fireball": "Tiny nope", + "entity.minecraft.snow_golem": "Cold Watr Hooman", + "entity.minecraft.snowball": "Cold wet", + "entity.minecraft.spawner_minecart": "Minecat wit spawnr", + "entity.minecraft.spectral_arrow": "Shini Errow", + "entity.minecraft.spider": "Spidur", + "entity.minecraft.squid": "Sqyd", + "entity.minecraft.stray": "Frozen Skeletun", + "entity.minecraft.strider": "mr hoo walx on laava", + "entity.minecraft.tadpole": "kute smol toad", + "entity.minecraft.tnt": "Primeld TNT", + "entity.minecraft.tnt_minecart": "Boomy Minecat", + "entity.minecraft.trader_llama": "Givr Camel", + "entity.minecraft.trident": "Dinglehopper", + "entity.minecraft.tropical_fish": "Topicel fis", + "entity.minecraft.tropical_fish.predefined.0": "Anemoen", + "entity.minecraft.tropical_fish.predefined.1": "Blak Tin", + "entity.minecraft.tropical_fish.predefined.10": "Mooriz Idowl", + "entity.minecraft.tropical_fish.predefined.11": "Ornat Buterflyphysh", + "entity.minecraft.tropical_fish.predefined.12": "Perrtfis", + "entity.minecraft.tropical_fish.predefined.13": "Quen Angl", + "entity.minecraft.tropical_fish.predefined.14": "Red Sickled", + "entity.minecraft.tropical_fish.predefined.15": "Rd Lippd Bleny", + "entity.minecraft.tropical_fish.predefined.16": "Red Snapur", + "entity.minecraft.tropical_fish.predefined.17": "Thrudfin", + "entity.minecraft.tropical_fish.predefined.18": "Red Funny Fishy", + "entity.minecraft.tropical_fish.predefined.19": "Triggerd Fishy", + "entity.minecraft.tropical_fish.predefined.2": "Blew Tin", + "entity.minecraft.tropical_fish.predefined.20": "Yello bird fishy", + "entity.minecraft.tropical_fish.predefined.21": "Yello Tin", + "entity.minecraft.tropical_fish.predefined.3": "Buttrfli Fsh", + "entity.minecraft.tropical_fish.predefined.4": "Sicklid", + "entity.minecraft.tropical_fish.predefined.5": "funny fishy", + "entity.minecraft.tropical_fish.predefined.6": "Cotun candeh fishy", + "entity.minecraft.tropical_fish.predefined.7": "Dotts in the back", + "entity.minecraft.tropical_fish.predefined.8": "Rich Red Snipper", + "entity.minecraft.tropical_fish.predefined.9": "Gowt fishy", + "entity.minecraft.tropical_fish.type.betty": "Betteh", + "entity.minecraft.tropical_fish.type.blockfish": "Blouckfish", + "entity.minecraft.tropical_fish.type.brinely": "Brnly", + "entity.minecraft.tropical_fish.type.clayfish": "Cley fishy", + "entity.minecraft.tropical_fish.type.dasher": "Runnr", + "entity.minecraft.tropical_fish.type.flopper": "Floppy", + "entity.minecraft.tropical_fish.type.glitter": "Glitur", + "entity.minecraft.tropical_fish.type.kob": "Kob", + "entity.minecraft.tropical_fish.type.snooper": "Snopr", + "entity.minecraft.tropical_fish.type.spotty": "Spotz", + "entity.minecraft.tropical_fish.type.stripey": "stipor", + "entity.minecraft.tropical_fish.type.sunstreak": "Sunzxcnjsa", + "entity.minecraft.turtle": "TortL", + "entity.minecraft.vex": "ghosty thingy", + "entity.minecraft.villager": "Vilaagur", + "entity.minecraft.villager.armorer": "Armurur", + "entity.minecraft.villager.butcher": "Butchur", + "entity.minecraft.villager.cartographer": "Mapmakr", + "entity.minecraft.villager.cleric": "Cleyric", + "entity.minecraft.villager.farmer": "Farmr", + "entity.minecraft.villager.fisherman": "Fishr", + "entity.minecraft.villager.fletcher": "Fletchur", + "entity.minecraft.villager.leatherworker": "Lethurwurkur", + "entity.minecraft.villager.librarian": "Nerdz", + "entity.minecraft.villager.mason": "Masun", + "entity.minecraft.villager.nitwit": "shtOOpid man", + "entity.minecraft.villager.none": "Vilaagur", + "entity.minecraft.villager.shepherd": "Shehprd", + "entity.minecraft.villager.toolsmith": "Toolsmif", + "entity.minecraft.villager.weaponsmith": "Weponsmif", + "entity.minecraft.vindicator": "Bad Guy", + "entity.minecraft.wandering_trader": "Wubterng Truder", + "entity.minecraft.warden": "Blu shrek", + "entity.minecraft.witch": "Crazy Kitteh Ownr", + "entity.minecraft.wither": "Wither", + "entity.minecraft.wither_skeleton": "Spooke Wither Skeletun", + "entity.minecraft.wither_skull": "Wither Hed", + "entity.minecraft.wolf": "Woof Woof!", + "entity.minecraft.zoglin": "Zoglin", + "entity.minecraft.zombie": "Bad Hooman", + "entity.minecraft.zombie_horse": "Zombee hoers", + "entity.minecraft.zombie_villager": "Unded Villaguur", + "entity.minecraft.zombified_piglin": "Zombiefid Piglin", + "entity.notFound": "Cat doezn't know diz zing: %s", + "event.minecraft.raid": "Rade", + "event.minecraft.raid.defeat": "Defeet", + "event.minecraft.raid.raiders_remaining": "Raiderz stieel alaiv: %s", + "event.minecraft.raid.victory": "ezpz", + "filled_map.buried_treasure": "Buredd Treet Findehr", + "filled_map.id": "Id #%s", + "filled_map.level": "(lvl %s/%s)", + "filled_map.locked": "Lockd", + "filled_map.mansion": "WOOdland explurer map", + "filled_map.monument": "Oshun explurer map", + "filled_map.scale": "Scalin @ 1:%s", + "filled_map.unknown": "Idk dis map", + "flat_world_preset.minecraft.bottomless_pit": "Da PIT Of FALLiNG DOWN", + "flat_world_preset.minecraft.classic_flat": "DA OG Flat", + "flat_world_preset.minecraft.desert": "Sandy Place", + "flat_world_preset.minecraft.overworld": "ON TOp WUrlD", + "flat_world_preset.minecraft.redstone_ready": "Reddy fer dat Redstone", + "flat_world_preset.minecraft.snowy_kingdom": "Kingdom ef Snows", + "flat_world_preset.minecraft.the_void": "Noutheyng", + "flat_world_preset.minecraft.tunnelers_dream": "Tunnel Manz Dream", + "flat_world_preset.minecraft.water_world": "Watr Wurld", + "flat_world_preset.unknown": "???", + "gameMode.adventure": "Catventure moed", + "gameMode.changed": "Ur gaem mowd has bin apdated tu %s", + "gameMode.creative": "HAX MOD", + "gameMode.hardcore": "Catcore Moed!", + "gameMode.spectator": "Spector moed", + "gameMode.survival": "Sirvivl Moed", + "gamerule.announceAdvancements": "Annunc advencement", + "gamerule.category.chat": "Chatz", + "gamerule.category.drops": "dops", + "gamerule.category.misc": "Miscelanus", + "gamerule.category.mobs": "Mahbs", + "gamerule.category.player": "Cat", + "gamerule.category.spawning": "Zponing", + "gamerule.category.updates": "Wurld updatz", + "gamerule.commandBlockOutput": "Broadcatz command blocky bois output thingy", + "gamerule.disableElytraMovementCheck": "Nou moar FLYYY", + "gamerule.disableRaids": "no raidz", + "gamerule.doDaylightCycle": "advanc tiem ov dai", + "gamerule.doEntityDrops": "Dop nenity kuitmenp", + "gamerule.doEntityDrops.description": "Kontrol dropz from mincartz (inclooding invantoriez), item framz, boat stuffs, etc.", + "gamerule.doFireTick": "Updat burny stuff", + "gamerule.doImmediateRespawn": "Reezpon fazt", + "gamerule.doInsomnia": "Spahn creepy flyin ting", + "gamerule.doLimitedCrafting": "Requaire recipee 4 kraftingz", + "gamerule.doLimitedCrafting.description": "If enabaled, cats will bee able 2 kraft onlee unlokd recipiez", + "gamerule.doMobLoot": "Drop cat goodies", + "gamerule.doMobLoot.description": "Twakes wower fnacy pants lwoot froms mwobs, invclubing eXeXpEeeE oorbz", + "gamerule.doMobSpawning": "Zpon tings", + "gamerule.doMobSpawning.description": "Som enteetees mait hav haz seprate rulz", + "gamerule.doPatrolSpawning": "Zpon ugly men wit krosbou", + "gamerule.doTileDrops": "Drop blockz", + "gamerule.doTileDrops.description": "Twakes wower fnacy pants lwoot froms blobs, invclubing eXeXpEeeE oorbz", + "gamerule.doTraderSpawning": "Spon Walkin Traderz", + "gamerule.doWardenSpawning": "Spon Big badd", + "gamerule.doWeatherCycle": "Updat wetder", + "gamerule.drowningDamage": "Deel 2 long in watr damaj", + "gamerule.fallDamage": "Deel fall damaj", + "gamerule.fireDamage": "Deel hot stuff damage", + "gamerule.forgiveDeadPlayers": "Forgiev ded kittehz", + "gamerule.forgiveDeadPlayers.description": "Angerd neutrl mobz stop goin angery moed wehn teh targetd playr oofz nearbai.", + "gamerule.freezeDamage": "do kold pain", + "gamerule.keepInventory": "Keepz invantorie aftur no livez", + "gamerule.logAdminCommands": "Broadcatz Admin orderz", + "gamerule.maxCommandChainLength": "Comnd chainz size limtz", + "gamerule.maxCommandChainLength.description": "Applizes to comand blockz tingy chainz and functionz", + "gamerule.maxEntityCramming": "Entiti cramin trushhold", + "gamerule.mobGriefing": "Alow anmgry mob actionz", + "gamerule.naturalRegeneration": "Regenrat kat loivs", + "gamerule.playersSleepingPercentage": "Sleepy katz percentg", + "gamerule.playersSleepingPercentage.description": "Kat percentge that must sleep 2 nite go byeeeeeeeee", + "gamerule.randomTickSpeed": "Random tickz speed rat", + "gamerule.reducedDebugInfo": "reduc debugz infos", + "gamerule.reducedDebugInfo.description": "Limitz contentz ov deeBUG screen", + "gamerule.sendCommandFeedback": "Sendz comand responz", + "gamerule.showDeathMessages": "show ded katz", + "gamerule.spawnRadius": "Reezpon pleac raduz", + "gamerule.spectatorsGenerateChunks": "Alow spectatwor kittehs to generat terainz", + "gamerule.universalAnger": "Big Angery!", + "gamerule.universalAnger.description": "Angerd neutrl mobz attacc ani neerbai playr, nut juzt teh playr dat angrd dem. Workz bezt if forgievDedKittehz iz dizabld.", + "generator.custom": "Kustom", + "generator.customized": "Cuztom frum da past", + "generator.minecraft.amplified": "BIGGUR", + "generator.minecraft.amplified.info": "Notis: Just 4 fun! Rekwirz a muscular compootr.", + "generator.minecraft.debug_all_block_states": "DBUG MOD", + "generator.minecraft.flat": "2 flatz 4 u", + "generator.minecraft.large_biomes": "bigur baiums", + "generator.minecraft.normal": "Nermal", + "generator.minecraft.single_biome_surface": "Onli 1 biomz", + "generator.single_biome_caves": "Caevz", + "generator.single_biome_floating_islands": "Flyin stoenlandz", + "gui.abuseReport.error.title": "sendin repot EPIK FIAL", + "gui.abuseReport.reason.alcohol_tobacco_drugs": "drugz ORR alcohol (orr even SMOKING!!!11)", + "gui.abuseReport.reason.alcohol_tobacco_drugs.description": "sum1 is encoraegeing (or tryin 2 maek) othrr kats 2 hav BAD drugz orr BAD stuffz orr even underaeg drinccin!!!", + "gui.abuseReport.reason.child_sexual_exploitation_or_abuse": "kitteh sesual excploit orrr down bad aboos D:", + "gui.abuseReport.reason.child_sexual_exploitation_or_abuse.description": "Sumwan is talkin abaut, or prumotin bad thins ivlulvin little kittens.", + "gui.abuseReport.reason.defamation_impersonation_false_information": "defame, faking bein sum odrr kat orr FAMOUSE KAT orr wrog inphoues", + "gui.abuseReport.reason.defamation_impersonation_false_information.description": "Someone iz damagin someone elsez reputashun, pretendin 2 be someone theyre not, or sharin false informashun wif teh aim 2 exploit or mislead others.", + "gui.abuseReport.reason.description": "Dumed duwn:", + "gui.abuseReport.reason.false_reporting": "FAK REPORT!!!1!", + "gui.abuseReport.reason.harassment_or_bullying": "CRAPtalkin or maeking othr catz sad :'(", + "gui.abuseReport.reason.harassment_or_bullying.description": "sum kat is thrwoing SHAEM, ataccin ORR even BULLY u or some othr kat!!! dis incl.s wen sum1 is traying so hard 2 contac u orr sum1 eles wifout consentt (can b a blaccmail) orr posztingg stuffs u orr odrr kats no want evryone elss 2 see publikly wifout consentt (aka \"doxxxingggg\"!!!!!!!!)", + "gui.abuseReport.reason.hate_speech": "Hate speech", + "gui.abuseReport.reason.hate_speech.description": "Sum1 iz atackin u or anothr cat basd on characwhistics of thweir idwentitie, like bewiefs, race, or swexualitie.", + "gui.abuseReport.reason.imminent_harm": "imminnt harm (aka \"about 2 happn\" harms)", + "gui.abuseReport.reason.imminent_harm.description": "Sum1 iz threatenin 2 harm u or sum1 else in real lif.", + "gui.abuseReport.reason.narration": "%s: %s", + "gui.abuseReport.reason.non_consensual_intimate_imagery": "Non-consensual intimate imagez", + "gui.abuseReport.reason.non_consensual_intimate_imagery.description": "Someone iz talkin bout, sharin or otherwise promotin private an intimate images.", + "gui.abuseReport.reason.self_harm_or_suicide": "Dangr Dangr! - Self hawrm or suicwide", + "gui.abuseReport.reason.self_harm_or_suicide.description": "Sum1 iz threatenin 2 harm themselvez in real life or talkin bout harmin themselvez in real life.", + "gui.abuseReport.reason.terrorism_or_violent_extremism": "Destwoyin or being way 2 violwent", + "gui.abuseReport.reason.terrorism_or_violent_extremism.description": "Sum1 iz talkin bout promotin, or threatenin 2 commit acts ov terorism or violent extrism 4 political, religious, ideological, or othr reasons.", + "gui.abuseReport.reason.title": "Chuse why u tateling", + "gui.abuseReport.send.error_message": "An Error Wuz Returnd While Sendin Ur Report:\n%s", + "gui.abuseReport.send.generic_error": "sumting went wong whiel sendin u repot :/", + "gui.abuseReport.send.http_error": "O NOES!!! an unforeseened h t t p error happnd whiel we weer sendeing ur repot :(", + "gui.abuseReport.send.json_error": "Encountered malformed payload while sendin ur report.", + "gui.abuseReport.send.service_unavailable": "Unable 2 reach the Abuse Reportin Service. Plz make sure u r connected 2 teh internet an try again.", + "gui.abuseReport.sending.title": "Sendin ur report...", + "gui.abuseReport.sent.title": "repoted!!!", + "gui.acknowledge": "i understnad.", + "gui.advancements": "Advnzmnts", + "gui.all": "Gimme evrythin", + "gui.back": "Bak", + "gui.banned.description": "%s\n\n%s\n\nLern moar at dis link: %s", + "gui.banned.description.permanent": "UR KITTYCAT ACCONT IS BANNED 4 INFINIT KAT LIVES!!! dat meens u camt plae wif odrr kittycats orr do relms :(", + "gui.banned.description.reason": "We recently received a report 4 bad behavior by ur akownt. Our moderators hav now reviewed ur case an identified it as %s, which goes against teh Minecraft Community Standards.", + "gui.banned.description.reason_id": "da code: %s", + "gui.banned.description.reason_id_message": "da code: %s - %s", + "gui.banned.description.temporary": "%s for nao doe, joo camt do realms ORR EVEN PLAE WIF UR KITTY KAT FRENDS :(", + "gui.banned.description.temporary.duration": "bc of dis, ur akkwunt wil b BEANED n wil b unbeaned in %s.", + "gui.banned.description.unknownreason": "ourr epik mod teem haves founded a down bad momento by ur accont frm a repot! aftrr review, we hafe seened that ur unepik gamer moov broke da mincraf comuniti stndardz!!!", + "gui.banned.title.permanent": "accound iz ded inside!!!111! :(", + "gui.banned.title.temporary": "akownt tempory suspened", + "gui.cancel": "Nu", + "gui.chatReport.comments": "comends reduct boks", + "gui.chatReport.describe": "Shawing details will help teh cats make a EPIC DECISION.", + "gui.chatReport.discard.content": "If u leef, ull lose dis report and ur comments.\nR u sure u wants 2 leef?", + "gui.chatReport.discard.discard": "Thwo away repawrt", + "gui.chatReport.discard.return": "Kep writin", + "gui.chatReport.discard.title": "wans 2 thrwoe awae yroue repot n talky-talez???", + "gui.chatReport.more_comments": "Pwease descrwibe what happened:", + "gui.chatReport.observed_what": "Why reportwing a cat? :(", + "gui.chatReport.read_info": "Info bout reporwtin", + "gui.chatReport.report_sent_msg": "We got ur repawrt now!\n\nWe'll lok at it-aftr our milk break.", + "gui.chatReport.select_chat": "Slect da msgs to repowrt", + "gui.chatReport.select_reason": "selekd a riport CATegory", + "gui.chatReport.selected_chat": "%s mesage(z) chous tu reporwt", + "gui.chatReport.send": "SENDZ REPORT", + "gui.chatReport.send.comments_too_long": "Mek ur cmnt smol", + "gui.chatReport.send.no_reason": "Pwease sewect a repwort CATegory", + "gui.chatReport.send.no_reported_messages": "Pwease sewect at least ONE message to report", + "gui.chatReport.send.too_many_messages": "Tu many msgs in da rewporwt", + "gui.chatReport.title": "Report Playr", + "gui.chatSelection.context": "msgs n chitchats n funy mincraf montagez in dis selektun wil b incld 2 provied moar contexto!", + "gui.chatSelection.fold": "%s unrelatd mesagez hidden", + "gui.chatSelection.heading": "%s %s", + "gui.chatSelection.message.narrate": "%s meowed: %s at %s", + "gui.chatSelection.selected": "%s/%s mesage(z) selectd", + "gui.chatSelection.title": "Select Chat Mesagez 2 Report", + "gui.days": "%s dayz)", + "gui.done": "Dun", + "gui.down": "Dawn", + "gui.entity_tooltip.type": "Toipe: %s", + "gui.hours": "%s long time(s)", + "gui.minutes": "%s minute(z)", + "gui.multiLineEditBox.character_limit": "%s/%s", + "gui.narrate.button": "%s butonn", + "gui.narrate.editBox": "%s chaenj box: %s", + "gui.narrate.slider": "%s slydurr", + "gui.no": "Nah", + "gui.none": "Nan", + "gui.ok": "K", + "gui.proceed": "pruseed", + "gui.recipebook.moreRecipes": "Right PAW 4 moar", + "gui.recipebook.search_hint": "Surch...", + "gui.recipebook.toggleRecipes.all": "Showin' all", + "gui.recipebook.toggleRecipes.blastable": "Showin' blstble recips", + "gui.recipebook.toggleRecipes.craftable": "Showin' craftble recips", + "gui.recipebook.toggleRecipes.smeltable": "Showin' smeltble recips", + "gui.recipebook.toggleRecipes.smokable": "Showin' smokble recips", + "gui.socialInteractions.blocking_hint": "Manag wiv Mekrosoft akowant", + "gui.socialInteractions.empty_blocked": "No blukd katz in litter box", + "gui.socialInteractions.empty_hidden": "No katz hiddin in litter box", + "gui.socialInteractions.hidden_in_chat": "Lowd meow frem %s wil bee hiden", + "gui.socialInteractions.hide": "Hide in litter box", + "gui.socialInteractions.narration.hide": "Hid a murr moawks fom da cat %s", + "gui.socialInteractions.narration.report": "Repowrt %s", + "gui.socialInteractions.narration.show": "No hid murr meows from da cat %s", + "gui.socialInteractions.report": "Oh! Report no gud actshionz", + "gui.socialInteractions.search_empty": "No katz wis dis naem", + "gui.socialInteractions.search_hint": "Surch...", + "gui.socialInteractions.server_label.multiple": "%s - %s katz", + "gui.socialInteractions.server_label.single": "%s - %s kat", + "gui.socialInteractions.show": "Shaw in litter box", + "gui.socialInteractions.shown_in_chat": "Lowd meow frem %s wil bee not hide", + "gui.socialInteractions.status_blocked": "Blukd", + "gui.socialInteractions.status_blocked_offline": "Blukd - Uvlyne", + "gui.socialInteractions.status_hidden": "Hiddn", + "gui.socialInteractions.status_hidden_offline": "Hiddeh - Uvlyne", + "gui.socialInteractions.status_offline": "Uvlyne", + "gui.socialInteractions.tab_all": "Gimme evrythin", + "gui.socialInteractions.tab_blocked": "Blokd", + "gui.socialInteractions.tab_hidden": "Hiddn", + "gui.socialInteractions.title": "Soshul interacshuns", + "gui.socialInteractions.tooltip.hide": "no mesegs today >:(", + "gui.socialInteractions.tooltip.report": "Sum1 did bad thingz >:(", + "gui.socialInteractions.tooltip.report.disabled": "No report fo u", + "gui.socialInteractions.tooltip.report.no_messages": "Thers no msgs for riport from cat %s", + "gui.socialInteractions.tooltip.report.not_reportable": "Yo catnt rewportw thif cat, cus thirf cat msgs catnt verifid un survur", + "gui.socialInteractions.tooltip.show": "Wach msg", + "gui.stats": "Catistics", + "gui.toMenu": "Bacc to teh playing with othr kittehs", + "gui.toTitle": "Bacc to titl scrin", + "gui.up": "Ahp", + "gui.yes": "Yez", + "instrument.minecraft.admire_goat_horn": "Look", + "instrument.minecraft.call_goat_horn": "*AAAAhhhhhh*", + "instrument.minecraft.dream_goat_horn": "Mind filmz", + "instrument.minecraft.feel_goat_horn": "Ged somthen", + "instrument.minecraft.ponder_goat_horn": "Pondr", + "instrument.minecraft.seek_goat_horn": "Thindin", + "instrument.minecraft.sing_goat_horn": "Noize", + "instrument.minecraft.yearn_goat_horn": "Wantd U_U", + "inventory.binSlot": "Destroe itum", + "inventory.hotbarInfo": "Sev T00lbar w/ %1$s+%2$s", + "inventory.hotbarSaved": "Item t00lbar sevd (rEEstor w/ %1$s+%2$s)", + "item.canBreak": "CAN DESTROI:", + "item.canPlace": "Can b put awn:", + "item.color": "Colur: %s", + "item.durability": "brokn lvl: %s/%s", + "item.dyed": "Culurd", + "item.minecraft.acacia_boat": "Akacia Watr Car", + "item.minecraft.acacia_chest_boat": "Acashuh Watr Car wit Cat Box", + "item.minecraft.allay_spawn_egg": "flyin blu mob spon ec", + "item.minecraft.amethyst_shard": "Purpur shinee pice", + "item.minecraft.apple": "Mapple", + "item.minecraft.armor_stand": "Stick hooman", + "item.minecraft.arrow": "ERROW", + "item.minecraft.axolotl_bucket": "Bukkit wit KUTE PINK FISHH", + "item.minecraft.axolotl_spawn_egg": "KUTE PINK FISH spon ec", + "item.minecraft.baked_potato": "Bak'd Pootato", + "item.minecraft.bat_spawn_egg": "Bad spon ec", + "item.minecraft.bee_spawn_egg": "B spon ec", + "item.minecraft.beef": "Spotty meet", + "item.minecraft.beetroot": "Betrut", + "item.minecraft.beetroot_seeds": "Betrut seds", + "item.minecraft.beetroot_soup": "Betrut supe", + "item.minecraft.birch_boat": "Burch Watr Car", + "item.minecraft.birch_chest_boat": "Birtch Watr Car wit Cat Box", + "item.minecraft.black_dye": "Ender powder", + "item.minecraft.blaze_powder": "Blayz powder", + "item.minecraft.blaze_rod": "Blayz Rawd", + "item.minecraft.blaze_spawn_egg": "Bleze spon ec", + "item.minecraft.blue_dye": "Water powder", + "item.minecraft.bone": "Doggy treetz", + "item.minecraft.bone_meal": "Smashed Skeletun", + "item.minecraft.book": "Book", + "item.minecraft.bow": "Bowz", + "item.minecraft.bowl": "boul", + "item.minecraft.bread": "bred", + "item.minecraft.brewing_stand": "Bubbleh", + "item.minecraft.brick": "Burned Clay", + "item.minecraft.brown_dye": "Chocolate powder", + "item.minecraft.bucket": "Shiny sit-in cold thing", + "item.minecraft.bundle": "Cat powch", + "item.minecraft.bundle.fullness": "%s/%s", + "item.minecraft.carrot": "rebbit treetz", + "item.minecraft.carrot_on_a_stick": "YUMMY FOOD ON STIK", + "item.minecraft.cat_spawn_egg": "Kitty Cat spon ec", + "item.minecraft.cauldron": "Rly big pot", + "item.minecraft.cave_spider_spawn_egg": "Cavspaydur spon ec", + "item.minecraft.chainmail_boots": "cliky fast bootz1!", + "item.minecraft.chainmail_chestplate": "BLINNG CHEHST", + "item.minecraft.chainmail_helmet": "blinghat", + "item.minecraft.chainmail_leggings": "Bling pantz", + "item.minecraft.charcoal": "burned w00d", + "item.minecraft.chest_minecart": "Minecat wif Cat Box", + "item.minecraft.chicken": "raw cluck", + "item.minecraft.chicken_spawn_egg": "Nugget spon ec", + "item.minecraft.chorus_fruit": "Frute dat Duznt Sing", + "item.minecraft.clay_ball": "cley prom", + "item.minecraft.clock": "Tiem tellur", + "item.minecraft.coal": "ur present", + "item.minecraft.cocoa_beans": "itz poop", + "item.minecraft.cod": "Roh Cod", + "item.minecraft.cod_bucket": "Cot buket", + "item.minecraft.cod_spawn_egg": "Cot spon ec", + "item.minecraft.command_block_minecart": "Minecat wif Comnd Bluk", + "item.minecraft.compass": "Spinny thing", + "item.minecraft.cooked_beef": "Bad spotty meet", + "item.minecraft.cooked_chicken": "cooked cluck", + "item.minecraft.cooked_cod": "Cookd Cod", + "item.minecraft.cooked_mutton": "Warm Mutn", + "item.minecraft.cooked_porkchop": "Toasted Piggeh", + "item.minecraft.cooked_rabbit": "Warm Jumpin Foodz", + "item.minecraft.cooked_salmon": "Crisp Pink Nomz", + "item.minecraft.cookie": "aCookeh", + "item.minecraft.copper_ingot": "Copurr ingut", + "item.minecraft.cow_spawn_egg": "Milk-Maeker spon ec", + "item.minecraft.creeper_banner_pattern": "bannr paturn", + "item.minecraft.creeper_banner_pattern.desc": "Creeper churge", + "item.minecraft.creeper_spawn_egg": "Cwepuh spon ec", + "item.minecraft.crossbow": "Crosbowz", + "item.minecraft.crossbow.projectile": "Projektile:", + "item.minecraft.cyan_dye": "Sky powder", + "item.minecraft.dark_oak_boat": "Blak Oke Watr Car", + "item.minecraft.dark_oak_chest_boat": "Blak Oak Watr Car wit Cat Box", + "item.minecraft.debug_stick": "Magik stik", + "item.minecraft.debug_stick.empty": "%s hash nu pwopewties", + "item.minecraft.debug_stick.select": "shelekted \"%s\" (%s)", + "item.minecraft.debug_stick.update": "\"%s\" tu %s", + "item.minecraft.diamond": "Ooooh shineee!", + "item.minecraft.diamond_axe": "Dimand Aks", + "item.minecraft.diamond_boots": "awesome shoes", + "item.minecraft.diamond_chestplate": "super cool shirt", + "item.minecraft.diamond_helmet": "very shiny hat", + "item.minecraft.diamond_hoe": "Deemond Hoe", + "item.minecraft.diamond_horse_armor": "SUPAH shiny hoofy fur", + "item.minecraft.diamond_leggings": "amazing pants", + "item.minecraft.diamond_pickaxe": "Dimand Pikakse", + "item.minecraft.diamond_shovel": "Dimand Spoon", + "item.minecraft.diamond_sword": "shiny sord", + "item.minecraft.disc_fragment_5": "Loud thing but brokn", + "item.minecraft.disc_fragment_5.desc": "Round loud thing - 5", + "item.minecraft.dolphin_spawn_egg": "doolfin spon ec", + "item.minecraft.donkey_spawn_egg": "Danky spon ec", + "item.minecraft.dragon_breath": "Dragunish puff", + "item.minecraft.dried_kelp": "crunchy sea leaves", + "item.minecraft.drowned_spawn_egg": "Drawn spon ec", + "item.minecraft.echo_shard": "boomerang sund pice", + "item.minecraft.egg": "Eg", + "item.minecraft.elder_guardian_spawn_egg": "Ehldur Gardien spon ec", + "item.minecraft.elytra": "FLYYYYYYYY", + "item.minecraft.emerald": "shineh green stuff", + "item.minecraft.enchanted_book": "Shineh Magic Book", + "item.minecraft.enchanted_golden_apple": "Glowy power apl", + "item.minecraft.end_crystal": "Endur Cristal", + "item.minecraft.ender_eye": "teh evil eye", + "item.minecraft.ender_pearl": "magic ball", + "item.minecraft.enderman_spawn_egg": "Enderman spon ec", + "item.minecraft.endermite_spawn_egg": "Endermite spon ec", + "item.minecraft.evoker_spawn_egg": "Evokr spon ec", + "item.minecraft.experience_bottle": "Potion wif ur levlz", + "item.minecraft.feather": "Dether", + "item.minecraft.fermented_spider_eye": "Bad spider bal", + "item.minecraft.filled_map": "Direction papeh", + "item.minecraft.fire_charge": "Fire Punch!", + "item.minecraft.firework_rocket": "shiny 'splody thing", + "item.minecraft.firework_rocket.flight": "TIEM OF FLY:", + "item.minecraft.firework_star": "dis makes da rocket go BOOM BOOM", + "item.minecraft.firework_star.black": "Blak", + "item.minecraft.firework_star.blue": "Blew", + "item.minecraft.firework_star.brown": "Broun", + "item.minecraft.firework_star.custom_color": "Kustom", + "item.minecraft.firework_star.cyan": "Nyan", + "item.minecraft.firework_star.fade_to": "vanish to", + "item.minecraft.firework_star.flicker": "Sparklies!", + "item.minecraft.firework_star.gray": "Gray", + "item.minecraft.firework_star.green": "Grean", + "item.minecraft.firework_star.light_blue": "Lite Blew", + "item.minecraft.firework_star.light_gray": "Lite Gray", + "item.minecraft.firework_star.lime": "Lyem", + "item.minecraft.firework_star.magenta": "Majenta", + "item.minecraft.firework_star.orange": "Stampy Colour", + "item.minecraft.firework_star.pink": "Pynk", + "item.minecraft.firework_star.purple": "Purpel", + "item.minecraft.firework_star.red": "Red", + "item.minecraft.firework_star.shape": "Squiggy shape", + "item.minecraft.firework_star.shape.burst": "Boom", + "item.minecraft.firework_star.shape.creeper": "Creepery", + "item.minecraft.firework_star.shape.large_ball": "BIG ball", + "item.minecraft.firework_star.shape.small_ball": "Tine", + "item.minecraft.firework_star.shape.star": "pointi shaep", + "item.minecraft.firework_star.trail": "Liens", + "item.minecraft.firework_star.white": "Wite", + "item.minecraft.firework_star.yellow": "Yello", + "item.minecraft.fishing_rod": "kitteh feedin' device", + "item.minecraft.flint": "sharpy rock", + "item.minecraft.flint_and_steel": "frint und steal", + "item.minecraft.flower_banner_pattern": "bannr paturn", + "item.minecraft.flower_banner_pattern.desc": "Flowerpower in Charge", + "item.minecraft.flower_pot": "container for all the pretty plantz", + "item.minecraft.fox_spawn_egg": "Fuxe spon ec", + "item.minecraft.frog_spawn_egg": "toad spon ec", + "item.minecraft.furnace_minecart": "Minecat wif Hot Box", + "item.minecraft.ghast_spawn_egg": "Ghast spon ec", + "item.minecraft.ghast_tear": "Ghast Tear", + "item.minecraft.glass_bottle": "GLAS BOTUL", + "item.minecraft.glistering_melon_slice": "glistrin melooon sliz", + "item.minecraft.globe_banner_pattern": "bannr paturn", + "item.minecraft.globe_banner_pattern.desc": "Glolbe", + "item.minecraft.glow_berries": "shiny berriz", + "item.minecraft.glow_ink_sac": "Shiny ink sac", + "item.minecraft.glow_item_frame": "Brite item holdr", + "item.minecraft.glow_squid_spawn_egg": "Shiny skwid spon ec", + "item.minecraft.glowstone_dust": "Glowstone duzt", + "item.minecraft.goat_horn": "monten shep's sharp thingy", + "item.minecraft.goat_spawn_egg": "monten shep spon ec", + "item.minecraft.gold_ingot": "GULDEN INGUT", + "item.minecraft.gold_nugget": "Shineh bawl", + "item.minecraft.golden_apple": "GULD APEL", + "item.minecraft.golden_axe": "Goldan Aks", + "item.minecraft.golden_boots": "GULD BOOTZ", + "item.minecraft.golden_carrot": "GULDEN CARRUT", + "item.minecraft.golden_chestplate": "GOLDEN CHESPLAET", + "item.minecraft.golden_helmet": "GULDEN HAT", + "item.minecraft.golden_hoe": "Goldn Hoe", + "item.minecraft.golden_horse_armor": "Goden Horz Armar", + "item.minecraft.golden_leggings": "GOLD PATNZ", + "item.minecraft.golden_pickaxe": "Goldan Pikakse", + "item.minecraft.golden_shovel": "Goldan Shaval", + "item.minecraft.golden_sword": "Goldan Sord", + "item.minecraft.gray_dye": "Moar dull powder", + "item.minecraft.green_dye": "Grass powder", + "item.minecraft.guardian_spawn_egg": "Gardien spon ec", + "item.minecraft.gunpowder": "Ganpowder", + "item.minecraft.heart_of_the_sea": "Hart of da see", + "item.minecraft.hoglin_spawn_egg": "Hoglin span ec", + "item.minecraft.honey_bottle": "huny buttle", + "item.minecraft.honeycomb": "honyconb", + "item.minecraft.hopper_minecart": "Minecat wif hoppez", + "item.minecraft.horse_spawn_egg": "Hors spon ec", + "item.minecraft.husk_spawn_egg": "Hask spon ec", + "item.minecraft.ink_sac": "Squirty nasty stuff", + "item.minecraft.iron_axe": "Iron Aks", + "item.minecraft.iron_boots": "Irun Shoes", + "item.minecraft.iron_chestplate": "Irun Vesst", + "item.minecraft.iron_helmet": "IRUNHAT", + "item.minecraft.iron_hoe": "Irun Hoe", + "item.minecraft.iron_horse_armor": "Shiny hoofy fur", + "item.minecraft.iron_ingot": "Irun Ingot", + "item.minecraft.iron_leggings": "Irun Pantz", + "item.minecraft.iron_nugget": "Steely thingy", + "item.minecraft.iron_pickaxe": "Iron Pikakse", + "item.minecraft.iron_shovel": "Iron Shaval", + "item.minecraft.iron_sword": "Irun Sowrd", + "item.minecraft.item_frame": "Kitteh Fraem", + "item.minecraft.jungle_boat": "Jungo Watr Car", + "item.minecraft.jungle_chest_boat": "Junglz Watr Car wit Cat Box", + "item.minecraft.knowledge_book": "Buk of Knawledg", + "item.minecraft.lapis_lazuli": "blu stuffz", + "item.minecraft.lava_bucket": "bukkit full of HOT SAUCE", + "item.minecraft.lead": "Leesh", + "item.minecraft.leather": "Lethur", + "item.minecraft.leather_boots": "Lethur Butz", + "item.minecraft.leather_chestplate": "Lethur Jackett", + "item.minecraft.leather_helmet": "Lethur Kap", + "item.minecraft.leather_horse_armor": "Leathr Horse Armor", + "item.minecraft.leather_leggings": "Lethur Pantz", + "item.minecraft.light_blue_dye": "Wet powder", + "item.minecraft.light_gray_dye": "Dull powder", + "item.minecraft.lime_dye": "Nasty powder", + "item.minecraft.lingering_potion": "Lingerin Poshun", + "item.minecraft.lingering_potion.effect.awkward": "Linnerin Poshun of weird", + "item.minecraft.lingering_potion.effect.empty": "Linnerin Poshun u Cann Onli Gat in HAX MODE", + "item.minecraft.lingering_potion.effect.fire_resistance": "Linnerin Poshun ov Fire Rezistance", + "item.minecraft.lingering_potion.effect.harming": "Linnerin Poshun ov Ouch", + "item.minecraft.lingering_potion.effect.healing": "Linnerin Poshun ov Healin", + "item.minecraft.lingering_potion.effect.invisibility": "Linnerin Poshun ov Hiding", + "item.minecraft.lingering_potion.effect.leaping": "Linnerin Poshun ov Leapin", + "item.minecraft.lingering_potion.effect.levitation": "Linnerin Poshun ov Levitashun", + "item.minecraft.lingering_potion.effect.luck": "Linnerin Poshun ov LOL", + "item.minecraft.lingering_potion.effect.mundane": "Linnerin Poshun ov Boringnes", + "item.minecraft.lingering_potion.effect.night_vision": "Linnerin Poshun ov Cat Vishun", + "item.minecraft.lingering_potion.effect.poison": "Linnerin Poshun ov Poizzon", + "item.minecraft.lingering_potion.effect.regeneration": "Linnerin Poshun ov Regenerashun", + "item.minecraft.lingering_potion.effect.slow_falling": "linnerin poshun uf slowmo fall", + "item.minecraft.lingering_potion.effect.slowness": "Linnerin Poshun ov Slownez", + "item.minecraft.lingering_potion.effect.strength": "Linnerin Poshun ov Strength", + "item.minecraft.lingering_potion.effect.swiftness": "Linnerin Poshun ov Spedz", + "item.minecraft.lingering_potion.effect.thick": "Linnerin Thig Poshun", + "item.minecraft.lingering_potion.effect.turtle_master": "Linnerin Poshun of TurTl Boss", + "item.minecraft.lingering_potion.effect.water": "Linnerin Watr Buttl", + "item.minecraft.lingering_potion.effect.water_breathing": "Linnerin Poshun ov Watr Breathin", + "item.minecraft.lingering_potion.effect.weakness": "Linnerin Poshun ov Weaknes", + "item.minecraft.llama_spawn_egg": "Lahmuh spon ec", + "item.minecraft.lodestone_compass": "loserstone compas", + "item.minecraft.magenta_dye": "Warmish powder", + "item.minecraft.magma_cream": "Flamin creem", + "item.minecraft.magma_cube_spawn_egg": "Magmuh cewb spon ec", + "item.minecraft.mangrove_boat": "Mangroff watr car", + "item.minecraft.mangrove_chest_boat": "Mangroff Watr Car wif Cat Box", + "item.minecraft.map": "cleen map", + "item.minecraft.melon_seeds": "Melan Seds", + "item.minecraft.melon_slice": "melon sliz", + "item.minecraft.milk_bucket": "mikk buket!!!", + "item.minecraft.minecart": "Minecat", + "item.minecraft.mojang_banner_pattern": "bannr paturn", + "item.minecraft.mojang_banner_pattern.desc": "Ting", + "item.minecraft.mooshroom_spawn_egg": "Mooshroom spon ec", + "item.minecraft.mule_spawn_egg": "Mewl spon ec", + "item.minecraft.mushroom_stew": "A supe of funges", + "item.minecraft.music_disc_11": "Round loud thing", + "item.minecraft.music_disc_11.desc": "C418 - 11", + "item.minecraft.music_disc_13": "Round loud thing", + "item.minecraft.music_disc_13.desc": "C418 - 13", + "item.minecraft.music_disc_5": "Round loud thing", + "item.minecraft.music_disc_5.desc": "Samuel \u00c5berg - 5", + "item.minecraft.music_disc_blocks": "Round loud thing", + "item.minecraft.music_disc_blocks.desc": "C418 - blocks", + "item.minecraft.music_disc_cat": "Round loud thing", + "item.minecraft.music_disc_cat.desc": "C418 - cat", + "item.minecraft.music_disc_chirp": "Round loud thing", + "item.minecraft.music_disc_chirp.desc": "C418 - chirp", + "item.minecraft.music_disc_far": "Round loud thing", + "item.minecraft.music_disc_far.desc": "C418 - far", + "item.minecraft.music_disc_mall": "Round loud thing", + "item.minecraft.music_disc_mall.desc": "C418 - mall", + "item.minecraft.music_disc_mellohi": "Round loud thing", + "item.minecraft.music_disc_mellohi.desc": "C418 - mellohi", + "item.minecraft.music_disc_otherside": "Round loud thing", + "item.minecraft.music_disc_otherside.desc": "Lena Raine - otherside", + "item.minecraft.music_disc_pigstep": "Round loud thing", + "item.minecraft.music_disc_pigstep.desc": "Lena Raine - Pigstep", + "item.minecraft.music_disc_stal": "Round loud thing", + "item.minecraft.music_disc_stal.desc": "C418 - stal", + "item.minecraft.music_disc_strad": "Round loud thing", + "item.minecraft.music_disc_strad.desc": "C418 - strad", + "item.minecraft.music_disc_wait": "Round loud thing", + "item.minecraft.music_disc_wait.desc": "C418 - wait", + "item.minecraft.music_disc_ward": "Round loud thing", + "item.minecraft.music_disc_ward.desc": "C418 - ward", + "item.minecraft.mutton": "Bloody Mutn", + "item.minecraft.name_tag": "Renaemer", + "item.minecraft.nautilus_shell": "Naughty shell", + "item.minecraft.nether_brick": "Nether brik", + "item.minecraft.nether_star": "Nether Asterisk", + "item.minecraft.nether_wart": "Icky Nether plant", + "item.minecraft.netherite_axe": "Netherite ax", + "item.minecraft.netherite_boots": "Netherite shoez", + "item.minecraft.netherite_chestplate": "Netherite sweatur", + "item.minecraft.netherite_helmet": "Netherite hat", + "item.minecraft.netherite_hoe": "Netherite Hoe", + "item.minecraft.netherite_ingot": "Netherite ingut", + "item.minecraft.netherite_leggings": "Netherite pantz", + "item.minecraft.netherite_pickaxe": "Netherite Pikax", + "item.minecraft.netherite_scrap": "Netherit skrapz", + "item.minecraft.netherite_shovel": "Netherite shuvl", + "item.minecraft.netherite_sword": "Netherite swurd", + "item.minecraft.oak_boat": "Ouk Watr Car", + "item.minecraft.oak_chest_boat": "Oak Boat wif Chest", + "item.minecraft.ocelot_spawn_egg": "Oslot spon ec", + "item.minecraft.orange_dye": "Bright powder", + "item.minecraft.painting": "Art on a paper", + "item.minecraft.panda_spawn_egg": "Green Stick Eatar spon ec", + "item.minecraft.paper": "Papyrus", + "item.minecraft.parrot_spawn_egg": "Pawet spon ec", + "item.minecraft.phantom_membrane": "creepy flyin ting mimbrain", + "item.minecraft.phantom_spawn_egg": "Fantum spon ec", + "item.minecraft.pig_spawn_egg": "Pic spon ec", + "item.minecraft.piglin_banner_pattern": "bannr paturn", + "item.minecraft.piglin_banner_pattern.desc": "Nouze", + "item.minecraft.piglin_brute_spawn_egg": "Piglin Brut spon ec", + "item.minecraft.piglin_spawn_egg": "Piglin spon ec", + "item.minecraft.pillager_spawn_egg": "Pilagur spon ec", + "item.minecraft.pink_dye": "Less warmy powder", + "item.minecraft.poisonous_potato": "no eat iz yukky", + "item.minecraft.polar_bear_spawn_egg": "Polah bar spon ec", + "item.minecraft.popped_chorus_fruit": "Popped Frut dat Duznt Sing", + "item.minecraft.porkchop": "rawr pig", + "item.minecraft.potato": "Pootato", + "item.minecraft.potion": "Poshun", + "item.minecraft.potion.effect.awkward": "Poshun of weird", + "item.minecraft.potion.effect.empty": "Poshun u Cann Onli Gat in HAX MODE", + "item.minecraft.potion.effect.fire_resistance": "Poshun ov Fire Rezistance", + "item.minecraft.potion.effect.harming": "Poshun ov Ouch", + "item.minecraft.potion.effect.healing": "Poshun ov Healin", + "item.minecraft.potion.effect.invisibility": "Poshun ov Hiding", + "item.minecraft.potion.effect.leaping": "Poshun ov Leapin", + "item.minecraft.potion.effect.levitation": "bad flyn", + "item.minecraft.potion.effect.luck": "Poshun ov LOL", + "item.minecraft.potion.effect.mundane": "Poshun ov Boringnes", + "item.minecraft.potion.effect.night_vision": "Poshun ov Cat Vishun", + "item.minecraft.potion.effect.poison": "Poshun ov Poizzon", + "item.minecraft.potion.effect.regeneration": "Poshun ov Regenerashun", + "item.minecraft.potion.effect.slow_falling": "Poshun of slowmo fall", + "item.minecraft.potion.effect.slowness": "Poshun ov Slownez", + "item.minecraft.potion.effect.strength": "chuckz noris pushun", + "item.minecraft.potion.effect.swiftness": "Poshun ov Spedz", + "item.minecraft.potion.effect.thick": "Fat Poshun", + "item.minecraft.potion.effect.turtle_master": "Potiun of TurTl Boss", + "item.minecraft.potion.effect.water": "Not for katz", + "item.minecraft.potion.effect.water_breathing": "Poshun ov Watr Breathing", + "item.minecraft.potion.effect.weakness": "Poshun ov Weaknes", + "item.minecraft.powder_snow_bucket": "Bukkit wit Powdr Sno", + "item.minecraft.prismarine_crystals": "Prizmarine pebblez", + "item.minecraft.prismarine_shard": "Prizmarine thingy", + "item.minecraft.pufferfish": "very yukky fishy", + "item.minecraft.pufferfish_bucket": "Pafforfosh buket!!!", + "item.minecraft.pufferfish_spawn_egg": "Pufahfis spon ec", + "item.minecraft.pumpkin_pie": "pie with squash in it", + "item.minecraft.pumpkin_seeds": "Pumpkez Sedz", + "item.minecraft.purple_dye": "Sorta-in-between powder", + "item.minecraft.quartz": "Nether cloudz", + "item.minecraft.rabbit": "Bloody Jumpin Foodz", + "item.minecraft.rabbit_foot": "Jumpin Foodz Fut", + "item.minecraft.rabbit_hide": "Jumpin Foodz Rag", + "item.minecraft.rabbit_spawn_egg": "Wabit spon ec", + "item.minecraft.rabbit_stew": "Warm Jumpin Foodz in Bawl", + "item.minecraft.ravager_spawn_egg": "Rivagur spon ec", + "item.minecraft.raw_copper": "moldy wurst", + "item.minecraft.raw_gold": "shiny coal", + "item.minecraft.raw_iron": "RAWWWW irun", + "item.minecraft.recovery_compass": "Deth findr v1.0\u2122\ufe0f", + "item.minecraft.red_dye": "Mojang powder", + "item.minecraft.redstone": "Redstone Dust", + "item.minecraft.rotten_flesh": "Taestz Laik Brokali", + "item.minecraft.saddle": "Sad-le :c", + "item.minecraft.salmon": "Rawr Pink Nomz", + "item.minecraft.salmon_bucket": "Salmon buket!!!", + "item.minecraft.salmon_spawn_egg": "Samin spon ec", + "item.minecraft.scute": "pice ov tutrl shell", + "item.minecraft.shears": "Skizzors", + "item.minecraft.sheep_spawn_egg": "Shep spon ec", + "item.minecraft.shield": "Cat protecshun", + "item.minecraft.shield.black": "Blak cat protecshun", + "item.minecraft.shield.blue": "Bloo cat protecshun", + "item.minecraft.shield.brown": "Broun cat protecshun", + "item.minecraft.shield.cyan": "Sighun cat protecshun", + "item.minecraft.shield.gray": "Moar dull cat protecshun", + "item.minecraft.shield.green": "Greenish cat protecshun", + "item.minecraft.shield.light_blue": "Lite bloo cat protecshun", + "item.minecraft.shield.light_gray": "Dull cat protecshun", + "item.minecraft.shield.lime": "Limd cat protecshun", + "item.minecraft.shield.magenta": "Majenta cat protecshun", + "item.minecraft.shield.orange": "Ornge cat protecshun", + "item.minecraft.shield.pink": "Pinky cat protecshun", + "item.minecraft.shield.purple": "Parpal cat protecshun", + "item.minecraft.shield.red": "Redish cat protecshun", + "item.minecraft.shield.white": "Wite cat protecshun", + "item.minecraft.shield.yellow": "Yello cat protecshun", + "item.minecraft.shulker_shell": "Shulker Shell", + "item.minecraft.shulker_spawn_egg": "Shuker spon eg", + "item.minecraft.sign": "Put najm", + "item.minecraft.silverfish_spawn_egg": "Sivahfish spon eg", + "item.minecraft.skeleton_horse_spawn_egg": "Skehlehten hors span eg", + "item.minecraft.skeleton_spawn_egg": "Skelehten spon ec", + "item.minecraft.skull_banner_pattern": "bannr paturn", + "item.minecraft.skull_banner_pattern.desc": "Skullz churge", + "item.minecraft.slime_ball": "boogerz", + "item.minecraft.slime_spawn_egg": "Sliem spon ec", + "item.minecraft.snowball": "Cold wet", + "item.minecraft.spectral_arrow": "Shini Errow", + "item.minecraft.spider_eye": "Spider bal", + "item.minecraft.spider_spawn_egg": "Spaydur spon ec", + "item.minecraft.splash_potion": "Throw Poshun", + "item.minecraft.splash_potion.effect.awkward": "Spleshy Poshun of weird", + "item.minecraft.splash_potion.effect.empty": "Spleshy Poshun u Cann Onli Gat in HAX MODE", + "item.minecraft.splash_potion.effect.fire_resistance": "Spleshy Poshun ov Fire Rezistance", + "item.minecraft.splash_potion.effect.harming": "Spleshy Poshun ov Ouch", + "item.minecraft.splash_potion.effect.healing": "Spleshy Poshun ov Healin", + "item.minecraft.splash_potion.effect.invisibility": "Spleshy Poshun ov Hiding", + "item.minecraft.splash_potion.effect.leaping": "Spleshy Poshun ov Leapin", + "item.minecraft.splash_potion.effect.levitation": "Spleshy Poshun ov Levitashun", + "item.minecraft.splash_potion.effect.luck": "Spleshy Poshun ov LOL", + "item.minecraft.splash_potion.effect.mundane": "Spleshy Poshun ov Boringnes", + "item.minecraft.splash_potion.effect.night_vision": "Spleshy Poshun ov Cat Vishun", + "item.minecraft.splash_potion.effect.poison": "Spleshy Poshun ov Poizzon", + "item.minecraft.splash_potion.effect.regeneration": "Spleshy Poshun ov Regenerashun", + "item.minecraft.splash_potion.effect.slow_falling": "Splashie poshun uf slowmo fall", + "item.minecraft.splash_potion.effect.slowness": "Spleshy Poshun ov Slownez", + "item.minecraft.splash_potion.effect.strength": "Spleshy Poshun ov Strength", + "item.minecraft.splash_potion.effect.swiftness": "Spleshy Poshun ov Spedz", + "item.minecraft.splash_potion.effect.thick": "Spleshy Thig Poshun", + "item.minecraft.splash_potion.effect.turtle_master": "Splashie poshun uf TurTl Boss", + "item.minecraft.splash_potion.effect.water": "Spleshy Watr Buttl", + "item.minecraft.splash_potion.effect.water_breathing": "Spleshy Poshun ov Watr Breathin", + "item.minecraft.splash_potion.effect.weakness": "Spleshy Poshun ov Weaknes", + "item.minecraft.spruce_boat": "Sproos Watr Car", + "item.minecraft.spruce_chest_boat": "Spruce Bot wif Chest", + "item.minecraft.spyglass": "I C U", + "item.minecraft.squid_spawn_egg": "Sqwid spon ec", + "item.minecraft.stick": "stik", + "item.minecraft.stone_axe": "Ston Akx", + "item.minecraft.stone_hoe": "Ston Hoe", + "item.minecraft.stone_pickaxe": "Ston Pikkatt", + "item.minecraft.stone_shovel": "stone spoon", + "item.minecraft.stone_sword": "Pointy rock", + "item.minecraft.stray_spawn_egg": "Strey spon ec", + "item.minecraft.strider_spawn_egg": "Straydur spon ec", + "item.minecraft.string": "CAN I HAZ TEH TAIL THING", + "item.minecraft.sugar": "Switz", + "item.minecraft.suspicious_stew": "IDK dont eat dat", + "item.minecraft.sweet_berries": "Sweet Beries", + "item.minecraft.tadpole_bucket": "buket wit toadpol", + "item.minecraft.tadpole_spawn_egg": "mini frog spon ec", + "item.minecraft.tipped_arrow": "Shooty Tihng", + "item.minecraft.tipped_arrow.effect.awkward": "Shooty Tihng", + "item.minecraft.tipped_arrow.effect.empty": "Shooty Tihng u Cann Onli Gat in HAX MODE", + "item.minecraft.tipped_arrow.effect.fire_resistance": "Speshul Shooty Tignh Dat Makez u Fire Rezistant", + "item.minecraft.tipped_arrow.effect.harming": "Speshul Shooty Tignh Dat Makez u Ouch", + "item.minecraft.tipped_arrow.effect.healing": "Speshul Shooty Tignh Dat Makez u Heal", + "item.minecraft.tipped_arrow.effect.invisibility": "Speshul Shooty Tignh Dat Makez u Invizibul", + "item.minecraft.tipped_arrow.effect.leaping": "Speshul Shooty Tignh Dat Makez u Bunny Cat", + "item.minecraft.tipped_arrow.effect.levitation": "Speshul Shooty Tignh Dat Makez u Flai", + "item.minecraft.tipped_arrow.effect.luck": "Speshul Shooty Tignh Dat Makez u LOL", + "item.minecraft.tipped_arrow.effect.mundane": "Shooty Tihng", + "item.minecraft.tipped_arrow.effect.night_vision": "Speshul Shooty Tignh Dat Makez u Cat Vishun", + "item.minecraft.tipped_arrow.effect.poison": "Speshul Shooty Tignh Dat Makez u Puiznd", + "item.minecraft.tipped_arrow.effect.regeneration": "Speshul Shooty Tignh Dat Makez u Reg", + "item.minecraft.tipped_arrow.effect.slow_falling": "Arruz uf slowmo fall", + "item.minecraft.tipped_arrow.effect.slowness": "Speshul Shooty Tignh Dat Makez u Slo", + "item.minecraft.tipped_arrow.effect.strength": "Speshul Shooty Tignh Dat Makez u Powahful", + "item.minecraft.tipped_arrow.effect.swiftness": "Speshul Shooty Tignh Dat Makez u Fazt", + "item.minecraft.tipped_arrow.effect.thick": "Shooty Tihng", + "item.minecraft.tipped_arrow.effect.turtle_master": "Arruwz of TurTl Boss", + "item.minecraft.tipped_arrow.effect.water": "Speshul Shooty Tignh Dat Splashes", + "item.minecraft.tipped_arrow.effect.water_breathing": "Speshul Shooty Tignh Dat Makez u Breathin undr Watr", + "item.minecraft.tipped_arrow.effect.weakness": "Speshul Shooty Tignh Dat Makez u Week", + "item.minecraft.tnt_minecart": "Boomy Minecat", + "item.minecraft.totem_of_undying": "Anti-dyin' Totum ", + "item.minecraft.trader_llama_spawn_egg": "Givr Camel spon ec", + "item.minecraft.trident": "Dinglehopper", + "item.minecraft.tropical_fish": "Weird water thing", + "item.minecraft.tropical_fish_bucket": "Weird water thing buket!!!", + "item.minecraft.tropical_fish_spawn_egg": "Trahpicul fish spon ec", + "item.minecraft.turtle_helmet": "TortL head", + "item.minecraft.turtle_spawn_egg": "TortL spon ec", + "item.minecraft.vex_spawn_egg": "Vax spon ec", + "item.minecraft.villager_spawn_egg": "Vilagur spon ec", + "item.minecraft.vindicator_spawn_egg": "Vindahcaytur spon ec", + "item.minecraft.wandering_trader_spawn_egg": "Wubterng Truder spon ec", + "item.minecraft.warden_spawn_egg": "Blu shrek spon ec", + "item.minecraft.warped_fungus_on_a_stick": "Warpt Foongis on a stick", + "item.minecraft.water_bucket": "WatR Buket", + "item.minecraft.wheat": "Weet", + "item.minecraft.wheat_seeds": "wit seeds", + "item.minecraft.white_dye": "Blank powder", + "item.minecraft.witch_spawn_egg": "Wetch spon ec", + "item.minecraft.wither_skeleton_spawn_egg": "Wither skelehten spon ec", + "item.minecraft.wolf_spawn_egg": "Wuf spon ec", + "item.minecraft.wooden_axe": "teh furst chopper", + "item.minecraft.wooden_hoe": "Wuddn Hoe", + "item.minecraft.wooden_pickaxe": "Wuddn Pikkatt", + "item.minecraft.wooden_shovel": "Wuddn Shuvl", + "item.minecraft.wooden_sword": "Wuddn Sord", + "item.minecraft.writable_book": "NeRd!", + "item.minecraft.written_book": "Book 4 Reeding", + "item.minecraft.yellow_dye": "Banana powder", + "item.minecraft.zoglin_spawn_egg": "Zoglin spwn eg", + "item.minecraft.zombie_horse_spawn_egg": "Zobi horz spon ec", + "item.minecraft.zombie_spawn_egg": "Zobi spon ec", + "item.minecraft.zombie_villager_spawn_egg": "Unded villaguur spon ec", + "item.minecraft.zombified_piglin_spawn_egg": "Zobifyed Piglin spon ec", + "item.modifiers.chest": "Wen un kit-cat bodi:", + "item.modifiers.feet": "Wehn un bak pawz:", + "item.modifiers.head": "Wen unn kit-cat hed:", + "item.modifiers.legs": "Wen un paws:", + "item.modifiers.mainhand": "Wehn in Maen Paw:", + "item.modifiers.offhand": "Wehn in Bad Paw:", + "item.nbt_tags": "NbT: %s stuf(z)", + "item.unbreakable": "no breakz", + "itemGroup.brewing": "Brwing", + "itemGroup.buildingBlocks": "Build Blukz", + "itemGroup.combat": "Combawt", + "itemGroup.decorations": "Decorashun Blukz", + "itemGroup.food": "Cheezburgers", + "itemGroup.hotbar": "Savd warmbras", + "itemGroup.inventory": "Sirvivl Stuff", + "itemGroup.materials": "Materialz", + "itemGroup.misc": "Miscelaneus", + "itemGroup.redstone": "Redstone", + "itemGroup.search": "Saerhc Itmz", + "itemGroup.tools": "Toolz", + "itemGroup.transportation": "Transportashun", + "item_modifier.unknown": "know'nt item mudifyer: %s", + "jigsaw_block.final_state": "Transforms to:", + "jigsaw_block.generate": "Crete!!", + "jigsaw_block.joint.aligned": "alyned", + "jigsaw_block.joint.rollable": "Hairballable", + "jigsaw_block.joint_label": "joynt typ:", + "jigsaw_block.keep_jigsaws": "Keep Jig saw", + "jigsaw_block.levels": "lvlz: %s", + "jigsaw_block.name": "Naem:", + "jigsaw_block.pool": "Taaget Pul:", + "jigsaw_block.target": "Walmart naem:", + "key.advancements": "Atfancemends", + "key.attack": "HYAHHH", + "key.back": "Roll Bakwordz", + "key.categories.creative": "Cat-gOd moDe", + "key.categories.gameplay": "Gaemply", + "key.categories.inventory": "Mah stuff", + "key.categories.misc": "Miscelanus", + "key.categories.movement": "hopz and bouncez", + "key.categories.multiplayer": "Moar Kittehz", + "key.categories.ui": "Teh buttonz", + "key.chat": "Opn Chatz", + "key.command": "Opn Cmds", + "key.drop": "Throw teh yarn away", + "key.forward": "Roll Forwardz", + "key.fullscreen": "turn on nd off teh fullzcrin", + "key.hotbar.1": "Front Pocket 1", + "key.hotbar.2": "Front Pocket 2", + "key.hotbar.3": "Front Pocket 3", + "key.hotbar.4": "Front Pocket 4", + "key.hotbar.5": "Front Pocket 5", + "key.hotbar.6": "Front Pocket 6", + "key.hotbar.7": "Front Pocket 7", + "key.hotbar.8": "Front Pocket 8", + "key.hotbar.9": "Front Pocket 9", + "key.inventory": "Opun/Cloze Secret fur pouch", + "key.jump": "Jumpy jumpy jumpy", + "key.keyboard.apostrophe": "'", + "key.keyboard.backslash": "\\", + "key.keyboard.backspace": "oops no", + "key.keyboard.caps.lock": "CAPZ", + "key.keyboard.comma": ",", + "key.keyboard.delete": "Deleet", + "key.keyboard.down": "Deown Arrowz", + "key.keyboard.end": "End", + "key.keyboard.enter": "Entr", + "key.keyboard.equal": "=", + "key.keyboard.escape": "escap", + "key.keyboard.f1": "F1", + "key.keyboard.f10": "F10", + "key.keyboard.f11": "F11", + "key.keyboard.f12": "F12", + "key.keyboard.f13": "F13", + "key.keyboard.f14": "F14", + "key.keyboard.f15": "F15", + "key.keyboard.f16": "F16", + "key.keyboard.f17": "F17", + "key.keyboard.f18": "F18", + "key.keyboard.f19": "F19", + "key.keyboard.f2": "F2", + "key.keyboard.f20": "F20", + "key.keyboard.f21": "F21", + "key.keyboard.f22": "F22", + "key.keyboard.f23": "F23", + "key.keyboard.f24": "F24", + "key.keyboard.f25": "F25", + "key.keyboard.f3": "F3", + "key.keyboard.f4": "F4", + "key.keyboard.f5": "F5", + "key.keyboard.f6": "F6", + "key.keyboard.f7": "F7", + "key.keyboard.f8": "F8", + "key.keyboard.f9": "F9", + "key.keyboard.grave.accent": "`", + "key.keyboard.home": "Kittybox", + "key.keyboard.insert": "Insurrt", + "key.keyboard.keypad.0": "Numbur 0", + "key.keyboard.keypad.1": "Numbur 1", + "key.keyboard.keypad.2": "Numbur 2", + "key.keyboard.keypad.3": "Numbur 3", + "key.keyboard.keypad.4": "Numbur 4", + "key.keyboard.keypad.5": "Numbur 5", + "key.keyboard.keypad.6": "Numbur 6", + "key.keyboard.keypad.7": "Numbur 7", + "key.keyboard.keypad.8": "Numbur 8", + "key.keyboard.keypad.9": "Numbur 9", + "key.keyboard.keypad.add": "Numbur +", + "key.keyboard.keypad.decimal": "Numbur '.'", + "key.keyboard.keypad.divide": "Keypad /", + "key.keyboard.keypad.enter": "Keypad Dun", + "key.keyboard.keypad.equal": "Keypad =", + "key.keyboard.keypad.multiply": "Keypad *", + "key.keyboard.keypad.subtract": "Keypad -", + "key.keyboard.left": "Lefty Arrowz", + "key.keyboard.left.alt": "Lefty Alt", + "key.keyboard.left.bracket": "[", + "key.keyboard.left.control": "Lefty Control", + "key.keyboard.left.shift": "Lefty Shiftz", + "key.keyboard.left.win": "Lefty Win", + "key.keyboard.menu": "Meneow", + "key.keyboard.minus": "-", + "key.keyboard.num.lock": "Numbz Lockz", + "key.keyboard.page.down": "Pagez Deown", + "key.keyboard.page.up": "Pagez Up", + "key.keyboard.pause": "Pawz", + "key.keyboard.period": ".", + "key.keyboard.print.screen": "Prnt Screenz", + "key.keyboard.right": "Righty Arrowz", + "key.keyboard.right.alt": "Righty Alt", + "key.keyboard.right.bracket": "]", + "key.keyboard.right.control": "Righty Control", + "key.keyboard.right.shift": "Righty Shiftz", + "key.keyboard.right.win": "Righty Win", + "key.keyboard.scroll.lock": "Scrolls Lockz", + "key.keyboard.semicolon": ";", + "key.keyboard.slash": "/", + "key.keyboard.space": "Spacez", + "key.keyboard.tab": "Tabz", + "key.keyboard.unknown": "nO key hEre", + "key.keyboard.up": "Up Arrowz", + "key.keyboard.world.1": "Wurld 1", + "key.keyboard.world.2": "Wurld 2", + "key.left": "Roll Left", + "key.loadToolbarActivator": "Lowd Hawtbar Ektivator", + "key.mouse": "Button %1$s", + "key.mouse.left": "Left Paw", + "key.mouse.middle": "Middl Paw", + "key.mouse.right": "Right Paw", + "key.pickItem": "Pick blukz", + "key.playerlist": "Show utur Kittehz", + "key.right": "Roll Right", + "key.saveToolbarActivator": "Sarv Hawtbar Ektivetor", + "key.screenshot": "makin funny picz fer interwebz", + "key.smoothCamera": "switch teh fanceh (feast) camera on nd off", + "key.sneak": "Tiptoe", + "key.socialInteractions": "Soshul interacshuns screen", + "key.spectatorOutlines": "Mak teh catz shinies (Spectorz)", + "key.sprint": "Sprint", + "key.swapOffhand": "Swap itemz in pawz", + "key.togglePerspective": "chang teh way kitteh lookzez", + "key.use": "Uze Item/Plac blukz", + "lanServer.otherPlayers": "Setinz 4 ohtr kittenz", + "lanServer.scanning": "Scannin for nearby kittenz", + "lanServer.start": "Start LAN Wurld", + "lanServer.title": "LAN Wurld", + "language.code": "qll", + "language.name": "LOLCAT", + "language.region": "Kingdom of Cats", + "lectern.take_book": "Taek Book", + "menu.convertingLevel": "Konverting wurld", + "menu.disconnect": "imma go now", + "menu.game": "Gameh menyu", + "menu.generatingLevel": "Generating Lols", + "menu.generatingTerrain": "initiatin cheezburgerz", + "menu.loadingForcedChunks": "Lowdin forcd chunkz fur dimenshun %s", + "menu.loadingLevel": "Lodin wurld", + "menu.modded": " (Moaddded!)", + "menu.multiplayer": "I can haz friendz", + "menu.online": "Minecraft Realms", + "menu.options": "Opshuns...", + "menu.paused": "gaem stopd", + "menu.playdemo": "Pluay Demo Wurld", + "menu.playerReporting": "Kat Repworting", + "menu.preparingSpawn": "Preepayrin spawn ayyrea: %s%%", + "menu.quit": "kthxbai", + "menu.reportBugs": "Catch Bugz", + "menu.resetdemo": "Rezet Demo Wurld", + "menu.respawning": "RE-PAW-NING", + "menu.returnToGame": "kk im back", + "menu.returnToMenu": "Sayv and cwit tu titel", + "menu.savingChunks": "Scratching the disk", + "menu.savingLevel": "Savin wurld", + "menu.sendFeedback": "Feed Us", + "menu.shareToLan": "Opn teh netwurks", + "menu.singleplayer": "Loneleh kitteh", + "menu.working": "Cat too lazy to work...", + "merchant.current_level": "Gift Kitteh curent levl", + "merchant.deprecated": "Vilaagurz restoc ahp two to tiemz purrr dai.", + "merchant.level.1": "Noviec", + "merchant.level.2": "Aprentis", + "merchant.level.3": "Jurneyman", + "merchant.level.4": "Ekspurt", + "merchant.level.5": "MasTr", + "merchant.next_level": "Gift Kitteh next levl", + "merchant.trades": "Tradez", + "mirror.front_back": "\u2191 \u2193", + "mirror.left_right": "\u2190 \u2192", + "mirror.none": "|", + "mount.onboard": "Prezz %1$s tu Dizmount", + "multiplayer.applyingPack": "Apllyinn resorce pak", + "multiplayer.disconnect.authservers_down": "Authenticashun srvrs r down. Pls com bak latr, sry!1", + "multiplayer.disconnect.banned": "ur bannd from dis sever", + "multiplayer.disconnect.banned.expiration": "ur ban wil be rmvd on %s", + "multiplayer.disconnect.banned.reason": "Supreem cat bannd u from dis srvr. Resun: %s", + "multiplayer.disconnect.banned_ip.expiration": "\nUr ban wil be rmvd on %s", + "multiplayer.disconnect.banned_ip.reason": "Supreem cat bannd u from dis srvr. Resun: %s", + "multiplayer.disconnect.chat_validation_failed": "Chat meow validashun faild", + "multiplayer.disconnect.duplicate_login": "U logd in frum another locashun", + "multiplayer.disconnect.expired_public_key": "Eggsfire plofill pabllick kee. chek dat uar sistemm tim iz sinklonyzd, end toy restating ur gam ", + "multiplayer.disconnect.flying": "Flyin iz nawt enabld on dis srvr", + "multiplayer.disconnect.generic": "CYA", + "multiplayer.disconnect.idling": "U hav ben idle 4 2 long!", + "multiplayer.disconnect.illegal_characters": "Not OK characterz in c(h)at", + "multiplayer.disconnect.incompatible": "Incmpatibl clynt! Plz uze %s", + "multiplayer.disconnect.invalid_entity_attacked": "Attemptin 2 attack an not valid entity", + "multiplayer.disconnect.invalid_packet": "Servr sent ey weird paket", + "multiplayer.disconnect.invalid_player_data": "Weird cat dataz", + "multiplayer.disconnect.invalid_player_movement": "Weird move player paket receivd", + "multiplayer.disconnect.invalid_public_key_signature": "Dis signatur 4 profil publik ki cant use. :(\nTry 2 restart ur game.", + "multiplayer.disconnect.invalid_vehicle_movement": "Weird moov vehicl paket receivd", + "multiplayer.disconnect.ip_banned": "Cat iz banned from ip from dis server", + "multiplayer.disconnect.kicked": "kikk ez by oprt9r", + "multiplayer.disconnect.missing_public_key": "I misd ur ke. \ngiv secur profilez.", + "multiplayer.disconnect.missing_tags": "Incomplat sec of tehs recived fom servah.\nPlez contac servah oporota.", + "multiplayer.disconnect.name_taken": "dat nam is taken, try cat100 or catcat", + "multiplayer.disconnect.not_whitelisted": "ur not part of th trulolcatclub100!d!&1", + "multiplayer.disconnect.out_of_order_chat": "Rong chatpacket gotten. much sistm timechange?", + "multiplayer.disconnect.outdated_client": "Incmpatibl clynt! Plz uze %s", + "multiplayer.disconnect.outdated_server": "Incmpatibl clyunt! Plz uze %s", + "multiplayer.disconnect.server_full": "Dat servR is compleet!!!!!", + "multiplayer.disconnect.server_shutdown": "Servur iz ded", + "multiplayer.disconnect.slow_login": "Took 2 long 2 login", + "multiplayer.disconnect.too_many_pending_chats": "2 many unacknowledged chat mesagez", + "multiplayer.disconnect.unexpected_query_response": "UniCZpektet cuztum deeta frum CLAINT!!!", + "multiplayer.disconnect.unsigned_chat": "Received chat packet wif missing or invalid signature.", + "multiplayer.disconnect.unverified_username": "Fail'd 2 verifi uszrnaem!", + "multiplayer.downloadingStats": "getting catistics...", + "multiplayer.downloadingTerrain": "Lodin cheezburgerz...", + "multiplayer.message_not_delivered": "Can nawt dilivr meow mesadg, check srvr lugs: %s", + "multiplayer.player.joined": "%s joind teh gaem", + "multiplayer.player.joined.renamed": "%s (used 2 b %s) joind teh gaem", + "multiplayer.player.left": "%s leeft teh gaem", + "multiplayer.requiredTexturePrompt.disconnect": "Survur nedz a vizyual", + "multiplayer.requiredTexturePrompt.line1": "Dis survur nedz u 2 use a cuztm vishul.", + "multiplayer.requiredTexturePrompt.line2": "Sayin no 2 thiz vizyual wil nope u from dis survur.", + "multiplayer.socialInteractions.not_available": "Soshul interacshuns r ownly avalible in utur kittehz werlds", + "multiplayer.status.and_more": "... & %s moar ...", + "multiplayer.status.cancelled": "Staphd", + "multiplayer.status.cannot_connect": "Cant conect 2 servr", + "multiplayer.status.cannot_resolve": "Cant reshulf hoznaym", + "multiplayer.status.finished": "Dun", + "multiplayer.status.incompatible": "Incompatible vershun!", + "multiplayer.status.no_connection": "(naw konecticon)", + "multiplayer.status.old": "Old", + "multiplayer.status.ping": "%s millisecndz", + "multiplayer.status.pinging": "Scratchin...", + "multiplayer.status.quitting": "KTHXBYE", + "multiplayer.status.request_handled": "Staeduz rekwesst haz bin haendlt", + "multiplayer.status.unknown": "???", + "multiplayer.status.unrequested": "Receivd unreqstd statuz", + "multiplayer.stopSleeping": "geuts upsi", + "multiplayer.texturePrompt.failure.line1": "Survur vizyual cotton't b applid", + "multiplayer.texturePrompt.failure.line2": "Eni functshunliy dis requiz vizyua mait no werk cuz ekspectd", + "multiplayer.texturePrompt.line1": "Dis servr recommendz teh use ov custom resource pack.", + "multiplayer.texturePrompt.line2": "You wantz DL and installz 'em magic?", + "multiplayer.texturePrompt.serverPrompt": "%s\n\nDa servr kitteh sayz:\n%s", + "multiplayer.title": "Pley with utur kittehz", + "multiplayer.unsecureserver.toast": "Mesagez sent on this servr may be modified an might not reflect teh original mesage", + "multiplayer.unsecureserver.toast.title": "Chat meow can't be verifed", + "multiplayerWarning.check": "Do not shw dis scren agin >:(", + "multiplayerWarning.header": "Caushun: Thurd-Parteh Onlien Plae", + "multiplayerWarning.message": "Coushn: Onlain pley is offerd bah therd-porty servrs that not be ownd, oprtd, or suprvisd by M0jang\nStuds or micrsft. durin' onlain pley, yu mey be expsed to unmdrated chat messges or othr typs\nof usr-generatd content tht may not be suitable for othr kitty-cats.", + "narration.button": "Buhton: %s", + "narration.button.usage.focused": "Prez Enter two aktiwait", + "narration.button.usage.hovered": "Lefft clck to aktivate", + "narration.checkbox": "Box: %s", + "narration.checkbox.usage.focused": "Prez Intr 2 toggl", + "narration.checkbox.usage.hovered": "Leaf clik 2 toggl", + "narration.component_list.usage": "Prez tab 2 nevigmicate 2 next elemnt plz", + "narration.cycle_button.usage.focused": "Press Entr to svitch to %s", + "narration.cycle_button.usage.hovered": "Leaf clik 2 swich 2 %s", + "narration.edit_box": "Edti boks: %s", + "narration.recipe": "how 2 meak %s", + "narration.recipe.usage": "Levvt clck to selekt", + "narration.recipe.usage.more": "Rite clik 2 show moar recipez", + "narration.selection.usage": "Prez up an down buttonz to muv 2 anothr intry", + "narration.slider.usage.focused": "Prez leaf or rite keyboord buttonz 2 change value", + "narration.slider.usage.hovered": "Draaaaag slidahr two chang value", + "narration.suggestion": "Chozun sugesston %s ut uf %s: %s", + "narration.suggestion.tooltip": "Chozun sugesston %s ut uf %s: %s (%s)", + "narrator.button.accessibility": "Aczessbilty", + "narrator.button.difficulty_lock": "Hardnez lock", + "narrator.button.difficulty_lock.locked": "Lockd", + "narrator.button.difficulty_lock.unlocked": "Unloked", + "narrator.button.language": "Wat u re speek", + "narrator.controls.bound": "%s iz bound 2 %s", + "narrator.controls.reset": "Rezet %s butonn", + "narrator.controls.unbound": "%s iz no bound", + "narrator.joining": "Joinin", + "narrator.loading": "Lodin: %s", + "narrator.loading.done": "Dun", + "narrator.position.list": "Selectd list rwo %s otu of %s", + "narrator.position.object_list": "Selectd row elemnt %s owt of %s", + "narrator.position.screen": "Scrin elemnt %s owt of %s", + "narrator.screen.title": "Teh Big Menu", + "narrator.screen.usage": "Uze Mickey mouse cursr or tab bttn 2 slct kitteh", + "narrator.select": "Selectd: %s", + "narrator.select.world": "Selectd %s, last playd: %s, %s, %s, vershun: %s", + "narrator.toast.disabled": "Sp00knator ded", + "narrator.toast.enabled": "Sp00knator ded", + "optimizeWorld.confirm.description": "Do u want to upgrade ur world? Cat dont love to do this. If u upgrade ur world, the world may play faster! But cat says u cant do that, because will no longer be compatible with older versions of the game. THAT IS NOT FUN BUT TERRIBLE!! R u sure you wish to proceed?", + "optimizeWorld.confirm.title": "Optimaiz kitteh land", + "optimizeWorld.info.converted": "Upgraeded pieces: %s", + "optimizeWorld.info.skipped": "Skipped pieces: %s", + "optimizeWorld.info.total": "Total pieces: %s", + "optimizeWorld.stage.counting": "Cowntin pieces...", + "optimizeWorld.stage.failed": "Oopsie doopsie! :(", + "optimizeWorld.stage.finished": "Finishin up...", + "optimizeWorld.stage.upgrading": "Upgraedin evry piece...", + "optimizeWorld.title": "Optimaiziin kitteh land '%s'", + "options.accessibility.link": "Aksesibilty Gaid", + "options.accessibility.text_background": "Tekst Bakround", + "options.accessibility.text_background.chat": "Chatz", + "options.accessibility.text_background.everywhere": "Evvywere", + "options.accessibility.text_background_opacity": "Tekt Bakrund 'pacty", + "options.accessibility.title": "Aksessibiwity Settinz...", + "options.allowServerListing": "Alluw Zerverz Listins", + "options.allowServerListing.tooltip": "Plz Dunt Shuw Myz Multiplar Namez Plz Minraft! Plzzzz.", + "options.ao": "Nize Shadoes", + "options.ao.max": "BIGGERER!!!!!!!", + "options.ao.min": "ittiest bittiest", + "options.ao.off": "Not activatez", + "options.attack.crosshair": "LAZR POINTR!", + "options.attack.hotbar": "HAWTBAR!", + "options.attackIndicator": "Scratch helpr", + "options.audioDevice": "Technowogy", + "options.audioDevice.default": "Sisten defolt", + "options.autoJump": "Cat-o-Jumpah", + "options.autoSuggestCommands": "Magic Stuff Suggestions", + "options.autosaveIndicator": "autosaev indiCATor", + "options.biomeBlendRadius": "mix baium", + "options.biomeBlendRadius.1": "NOT (best for potato)", + "options.biomeBlendRadius.11": "11x11 (not kul for pc)", + "options.biomeBlendRadius.13": "13x13 (fur shaww)", + "options.biomeBlendRadius.15": "15x15 (hypermegasupah hi')", + "options.biomeBlendRadius.3": "3x3 (fazt)", + "options.biomeBlendRadius.5": "fivx5 (normie)", + "options.biomeBlendRadius.7": "7w7 (hi')", + "options.biomeBlendRadius.9": "9x9 (supah hi')", + "options.chat.color": "Colurz", + "options.chat.delay": "Delayyyyy: %s sec;)", + "options.chat.delay_none": "Delayyyyy: no:(", + "options.chat.height.focused": "Focushened Tallnes", + "options.chat.height.unfocused": "Unfocushened Tallnes", + "options.chat.line_spacing": "Lime spasin", + "options.chat.links": "Web Links", + "options.chat.links.prompt": "Prompt on Linkz", + "options.chat.opacity": "Persuntage Of Ninja text", + "options.chat.scale": "Chata saiz", + "options.chat.title": "Chatz Opshuns...", + "options.chat.visibility": "Chatz", + "options.chat.visibility.full": "Showed", + "options.chat.visibility.hidden": "Hiddn", + "options.chat.visibility.system": "Cmds only", + "options.chat.width": "Waidnez", + "options.chatPreview": "luk at chat\n", + "options.chatPreview.confirm": "Wen screaming", + "options.chatPreview.live": "While Press Buttonz", + "options.chatPreview.tooltip.confirm": "If a servr usez Chat Previws: A chat preview iz only generatd wen attemptin 2 send a mesage dat does not hav a preview or is waitin 4 a preview. Sendin teh mesage requires confirmashun.", + "options.chatPreview.tooltip.live": "If a servr usez Chat Previews: Any modificashuns applied 2 ur chat mesagez by a servr will be dynamically sent 4 previewin as teh chat mesage iz typed.", + "options.chatPreview.tooltip.off": "Any midificashuns applied 2 ur chat mesagez by a servr will not be previewed an will be treated as insecure.", + "options.chunks": "%s pieces", + "options.clouds.fancy": "Fanceh", + "options.clouds.fast": "WEEEE!!!!", + "options.controls": "Controlz...", + "options.customizeTitle": "Custumiez Wurld Setinz", + "options.darkMojangStudiosBackgroundColor": "oone culur lugo", + "options.darkMojangStudiosBackgroundColor.tooltip": "Dis wil change da Mojang Studios loding skreen baccground kolor two blakk.", + "options.darknessEffectScale": "Sussy fog", + "options.darknessEffectScale.tooltip": "Cultrul hao much da Black Efek pulses wen a Blu shrek or Kat Yeller giv it 2 u.", + "options.difficulty": "hardnez", + "options.difficulty.easy": "Meh", + "options.difficulty.hard": "Double Cheezburger", + "options.difficulty.hardcore": "YOLO", + "options.difficulty.normal": "Regulr", + "options.difficulty.online": "Kittenz Zerverz Difcult", + "options.difficulty.peaceful": "Cake", + "options.directionalAudio": "where daz sound com frum", + "options.directionalAudio.off.tooltip": "Ztereo madness do be vibin", + "options.directionalAudio.on.tooltip": "Usez HRTF-based direcshunal audio 2 improve teh simulashuj ov 3D sound. Requires HRRR compatible audio hardware, and iz best experienced wif headphones.", + "options.discrete_mouse_scroll": "Dicrete Scrolin'", + "options.entityDistanceScaling": "Nenity distance", + "options.entityShadows": "Nenity Shddows", + "options.forceUnicodeFont": "FORS UNICAT FONT", + "options.fov": "FOV", + "options.fov.max": "CATNIP", + "options.fov.min": "Regulr", + "options.fovEffectScale": "No kitty-cat eye effect", + "options.fovEffectScale.tooltip": "Controls how much teh field ov view can change wif gameplay effects.", + "options.framerate": "%s mps (meows/s)", + "options.framerateLimit": "max mps", + "options.framerateLimit.max": "Omglimited", + "options.fullscreen": "Whole screne", + "options.fullscreen.current": "Currnt", + "options.fullscreen.resolution": "Fullscreen resolushun", + "options.fullscreen.unavailable": "Missin Ferradas", + "options.gamma": "shinies settin", + "options.gamma.default": "Nermal", + "options.gamma.max": "2 brite 4 me", + "options.gamma.min": "y so mudy", + "options.generic_value": "%s: %s", + "options.graphics": "Grafikz", + "options.graphics.fabulous": "Fabuliss!", + "options.graphics.fabulous.tooltip": "%s gwaphis usez zadars far doodling wethar, cottun candie and paticlez behind da fuzzy blobs aund slush-slush!\nPorthabal thewices aund 4Kat diwplayz may bee sevely imawted inm perwomans.", + "options.graphics.fancy": "Fanceh", + "options.graphics.fancy.tooltip": "Fansee grafiks baylanses performans aand qwlity four majoiti oof taxis.\nWeawher, cotton candi, aund bobs may nout apeeaar when hiding behwind thransluwant bwacks aund slosh-slosh.", + "options.graphics.fast": "WEEEE!!!!", + "options.graphics.fast.tooltip": "Spweed gwafics weduces da amoount oof seeable chum-chum and bum-bum.\nTwanspawancy ewfacts aren stanky forw loth of bwokz lwike lllleeeeaavveesssss.", + "options.graphics.warning.accept": "Hoopitie wiwout pillarz", + "options.graphics.warning.cancel": "Pwease letz me returnn", + "options.graphics.warning.message": "Graphikz thingy no supurt fer dis %s gwaphics popshon\n\nkat can igner dis but supurt no happen fer ur thingy if kat choze %s graphikz wowption.", + "options.graphics.warning.renderer": "Doodler thetecthed: [%s]", + "options.graphics.warning.title": "Graphikz thingy go bboom", + "options.graphics.warning.vendor": "Tha goodz stuf detec: [%s]", + "options.graphics.warning.version": "u haz oopneGL", + "options.guiScale": "gooey scalez", + "options.guiScale.auto": "liek magicz", + "options.hidden": "Hiddn", + "options.hideLightningFlashes": "Hied litening flashz (too scary)", + "options.hideLightningFlashes.tooltip": "Stopz laightnang flasherr from hurting ya eyez. Da bolts will still be vizible.", + "options.hideMatchedNames": "Hide macht naems", + "options.hideMatchedNames.tooltip": "udur katz can givez u presunts in werd wrappur.\nWif dis enabl: hidun katz vil be faund wif presunt sendur naems.", + "options.invertMouse": "esuoM trevnI", + "options.key.hold": "Prezz", + "options.key.toggle": "Togel", + "options.language": "Wat u re speek...", + "options.languageWarning": "Tranzlashuns cud not be 100%% akkurit", + "options.mainHand": "Maen hand", + "options.mainHand.left": "Left Paw", + "options.mainHand.right": "Rite Paw", + "options.mipmapLevels": "Mepmop lvls", + "options.modelPart.cape": "Flappy-thing", + "options.modelPart.hat": "Thing-On-Head", + "options.modelPart.jacket": "Jackett", + "options.modelPart.left_pants_leg": "Let Pantz Leg", + "options.modelPart.left_sleeve": "Left Slev", + "options.modelPart.right_pants_leg": "Right Pantz Leg", + "options.modelPart.right_sleeve": "Right Slev", + "options.mouseWheelSensitivity": "Scrawl Senzitivity", + "options.mouse_settings": "Mouz Settinz...", + "options.mouse_settings.title": "Mouz Settinz", + "options.multiplayer.title": "Utur kittehz setinz...", + "options.narrator": "Sp00knator", + "options.narrator.all": "Meowz Evrythin", + "options.narrator.chat": "Meowz Le Chat", + "options.narrator.notavailable": "Kitteh cant has", + "options.narrator.off": "naw", + "options.narrator.system": "Meowz sistem", + "options.off": "naw", + "options.off.composed": "%s: NAW", + "options.on": "yiss", + "options.on.composed": "%s: YISS", + "options.online": "Onlain kittnz...", + "options.online.title": "Onlin Optinz", + "options.onlyShowSecureChat": "Protektd chats only", + "options.onlyShowSecureChat.tooltip": "Only display mesagez frun other playrs dat can be verified 2 hav been sent by dat playr, an hav not been modified.", + "options.particles": "LITUL BITS", + "options.particles.all": "EvriTHiNg", + "options.particles.decreased": "Smallerz", + "options.particles.minimal": "Smallersist", + "options.percent_add_value": "%s: +%s%%", + "options.percent_value": "%s: %s%%", + "options.pixel_value": "%s: %spx", + "options.prioritizeChunkUpdates": "Chukn buildr", + "options.prioritizeChunkUpdates.byPlayer": "blocking but not like completely", + "options.prioritizeChunkUpdates.byPlayer.tooltip": "Sum actionz inzid a chunk wiwl remakd da chunk imediatly!! Dis incwudz blok placin & destwoyin.", + "options.prioritizeChunkUpdates.nearby": "One hundrd parcent bloccing", + "options.prioritizeChunkUpdates.nearby.tooltip": "Chuckns near bye is always compild IMEDIATLYy!!! Dis may mess wit gaem performace when blocks broken, destroyed, etc etc etc", + "options.prioritizeChunkUpdates.none": "threddit", + "options.prioritizeChunkUpdates.none.tooltip": "Neawby chunkz awre maekd in matchn thredz. Dis mai wesolt in bref cheezey vizion wen u brek blocz.", + "options.rawMouseInput": "Uncooked input", + "options.realmsNotifications": "Realms Notyficashuns", + "options.reducedDebugInfo": "Less debugz infoz", + "options.renderClouds": "Cottn Candi", + "options.renderDistance": "rendur far away thingy", + "options.resourcepack": "Resource Packz...", + "options.screenEffectScale": "Cat-mint effcts", + "options.screenEffectScale.tooltip": "Da strengt of nousea and Nether portal scrin cat mint effects.\nAt da lowr values, the nousea effct is replaced wit a grin ovrlay.", + "options.sensitivity": "Senzitivity", + "options.sensitivity.max": "WEEEEEEEE!!!", + "options.sensitivity.min": "*zzz*", + "options.showSubtitles": "Shew saund textz", + "options.simulationDistance": "Seamulation Distanz", + "options.skinCustomisation": "How ur skin look liek...", + "options.skinCustomisation.title": "How ur skin look liek", + "options.sounds": "Musik & Soundz...", + "options.sounds.title": "Musik & Sund Opshuns", + "options.title": "Opshuns", + "options.touchscreen": "Paw Pressing Power", + "options.video": "Grefix Setinz...", + "options.videoTitle": "Grefix setinz", + "options.viewBobbing": "Bouncey Hed", + "options.visible": "Shawn", + "options.vsync": "VSink", + "outOfMemory.message": "Minecraft has ran out inman.\n\nDis could be causd bai a bug in the game or by the JVM not being allokatd enough inman.\n\n2 prevent lvl corruption, da current game has quit. We've trid 2 free up enouf inman 2 let 2 go back 2 the main menyu and back to playin, but dis may not have workd.\n\nPls restart da game if u see dis msg again.", + "outOfMemory.title": "Memary noo ehough!", + "pack.available.title": "Avaylabl", + "pack.copyFailure": "Faild 2 copeh packz", + "pack.dropConfirm": "U wantz 2 add followin packz 2 Minceraft?", + "pack.dropInfo": "Dragz an dropz fylez in2 dis windw 2 add packz", + "pack.folderInfo": "(plaec visualz heer)", + "pack.incompatible": "LOLcatz cant uze dis to mak memes!", + "pack.incompatible.confirm.new": "Diz eyz wur maded 4 a new generashun ov kittehz an ur literbox mae lookz wierd.", + "pack.incompatible.confirm.old": "Diz eyes wur maded 4 eld r vershuns ov Minceraft an mae nut maek epik meemz.", + "pack.incompatible.confirm.title": "R u sur u wantz to lud dis new pair uf eyes?", + "pack.incompatible.new": "(Myade for a newerborn verzhun of Minceraftr)", + "pack.incompatible.old": "(Myade fur an elder verzhun of Minceraftr)", + "pack.nameAndSource": "%s (%s)", + "pack.openFolder": "Opn pac foldr", + "pack.selected.title": "Dis 1", + "pack.source.builtin": "bulded-in", + "pack.source.local": "lolcal", + "pack.source.server": "survr", + "pack.source.world": "world", + "parsing.bool.expected": "Expectd boolean", + "parsing.bool.invalid": "Invalid boolean, expectd true or false but findz %s", + "parsing.double.expected": "expectd double", + "parsing.double.invalid": "Invalid double %s", + "parsing.expected": "Expectd %s", + "parsing.float.expected": "Expectd float", + "parsing.float.invalid": "Invalid float %s", + "parsing.int.expected": "Expectd integr", + "parsing.int.invalid": "Invalid integr %s", + "parsing.long.expected": "Eggspected lounge", + "parsing.long.invalid": "Invalid lounge '%s'", + "parsing.quote.escape": "Invalid escape sequence \\%s in quotd strin", + "parsing.quote.expected.end": "Unclosd quotd strin", + "parsing.quote.expected.start": "Expectd quote 2 start strin", + "particle.notFound": "Unknewwn particle: %s", + "permissions.requires.entity": "An entwity is reqwayured tew run dis cumand heyre", + "permissions.requires.player": "A playur iz reqwiyured tew run dis cumand heyer", + "potion.potency.1": "II", + "potion.potency.2": "III", + "potion.potency.3": "IV", + "potion.potency.4": "V", + "potion.potency.5": "VI", + "potion.whenDrank": "When Applid:", + "potion.withAmplifier": "%s %s", + "potion.withDuration": "%s (%s)", + "predicate.unknown": "Idk whet predikate is dat: %s", + "realms.missing.module.error.text": "Realm culd no be opend rigt noew, plz try agin leter", + "realms.missing.snapshot.error.text": "realms is cuwantly not supprotd in snapshots", + "recipe.notFound": "Unknew recipi: %s", + "recipe.toast.description": "Chek ur resip beek", + "recipe.toast.title": "Nu Resipees Unlokt!", + "record.nowPlaying": "Naw plaing: %s", + "resourcePack.broken_assets": "BROKD ASSETZ DETECTED", + "resourcePack.load_fail": "Resourecpac failz @ relod", + "resourcePack.server.name": "Kitteh Specefik Resourcez", + "resourcePack.title": "Chooz Vizyualz", + "resourcePack.vanilla.description": "Teh uzual vizyual", + "resourcepack.downloading": "Duwnluzinz vizualz", + "resourcepack.progress": "Downloadin filez (%s MB)...", + "resourcepack.requesting": "Makin' requestz...", + "screenshot.failure": "coodent sayv scrienshot: %s", + "screenshot.success": "savd skreehnshot az %s", + "selectServer.add": "Ad Servr", + "selectServer.defaultName": "Minecraft Servr", + "selectServer.delete": "Deleet", + "selectServer.deleteButton": "Deleet", + "selectServer.deleteQuestion": "R u sur 2 remuv dis servr??", + "selectServer.deleteWarning": "'%s' wil b lozt for lotz of eternityz (longir den kitteh napz)", + "selectServer.direct": "GOIN TO SERVER......", + "selectServer.edit": "Edetit", + "selectServer.hiddenAddress": "(NO LOOKY)", + "selectServer.refresh": "Refursh", + "selectServer.select": "Plaey wif othr catz", + "selectServer.title": "Chooz Servr", + "selectWorld.access_failure": "Nu kan acsez levl", + "selectWorld.allowCommands": "K DO HAKS", + "selectWorld.allowCommands.info": "Cmds liek /geimoud or /ex pi", + "selectWorld.backupEraseCache": "Erais cachd deta", + "selectWorld.backupJoinConfirmButton": "saev stuffz n' lode", + "selectWorld.backupJoinSkipButton": "Cat go.", + "selectWorld.backupQuestion.customized": "Weird woldz are no lonjer suported", + "selectWorld.backupQuestion.downgrade": "Wurld downgradin iz not suported!", + "selectWorld.backupQuestion.experimental": "Wurld usin Experimental setinz is nu acceptablz", + "selectWorld.backupQuestion.snapshot": "Rlly want to lud dis litterbox?", + "selectWorld.backupWarning.customized": "Sowy, i dont doo custumizd world In dis tiep of minecraf. I can play world and everyting will be ok but new land will not be fancy and cusstumb no more. Plz forgive!", + "selectWorld.backupWarning.downgrade": "Dis wurld waz last playd in like version %s idk an ur usig %s, downgradin wurldz may corrupt or somethin and we cant guarantea if it will load n' work so maek backup plz if you still want two continue!", + "selectWorld.backupWarning.experimental": "Dis wurld uziz da expurrimentul settinz dat mabeh stahp workin sumtiem. It mite no wurk! Da spooky lizord liv here!", + "selectWorld.backupWarning.snapshot": "Dis wurld wuz last playd in vershun %s; u r on vershun %s. Srsly plz mak bakup in caes u experienec wurld curuptshuns!", + "selectWorld.bonusItems": "Bonuz Kat Box", + "selectWorld.cheats": "HAX", + "selectWorld.conversion": "IS OUTDATTED!", + "selectWorld.conversion.tooltip": "Dis wrld must open first in da super ultra old version (lyke 1.6.4) to be converted safe", + "selectWorld.create": "Maek new Wurld", + "selectWorld.createDemo": "Play new demu wurld", + "selectWorld.customizeType": "UR OWN WURLD SETNGS", + "selectWorld.dataPacks": "Nerdz stwuff", + "selectWorld.data_read": "Reeding wurld stuffz...", + "selectWorld.delete": "Deleet", + "selectWorld.deleteButton": "Deleet", + "selectWorld.deleteQuestion": "U SHUR U WANT TO DELET?!", + "selectWorld.deleteWarning": "'%s' wial beh lozt forevr (longir than kittehz napz)", + "selectWorld.delete_failure": "Nu can removz levl", + "selectWorld.edit": "Chaenj", + "selectWorld.edit.backup": "Meow a bakup", + "selectWorld.edit.backupCreated": "Baekt'up: %s", + "selectWorld.edit.backupFailed": "Bakupz faild", + "selectWorld.edit.backupFolder": "Owpen bakup foldr", + "selectWorld.edit.backupSize": "SizE: %s MB", + "selectWorld.edit.export_worldgen_settings": "Eckspurt wurld genaraishun settinz", + "selectWorld.edit.export_worldgen_settings.failure": "Expurrt iz no", + "selectWorld.edit.export_worldgen_settings.success": "Expurrted", + "selectWorld.edit.openFolder": "Open ze litter foldah", + "selectWorld.edit.optimize": "Optimaiz kitteh land", + "selectWorld.edit.resetIcon": "Reset ur iconz", + "selectWorld.edit.save": "Saev", + "selectWorld.edit.title": "Edidet Litterbox", + "selectWorld.enterName": "Wurld naem", + "selectWorld.enterSeed": "RANDOM NUMBER 4 WURLD GENRASUR", + "selectWorld.futureworld.error.text": "A kat died wile tryng 2 load 1 wurld fromm 1 footshure vershn. Dis waz 1 riskee operashn 2 begn wiz; srry your kat iz ded.", + "selectWorld.futureworld.error.title": "Tingz no workz!", + "selectWorld.gameMode": "Gaem moed", + "selectWorld.gameMode.adventure": "Catventure", + "selectWorld.gameMode.adventure.line1": "Saem az Survivl Moed, but bloxx caen't", + "selectWorld.gameMode.adventure.line2": "b addd r remvd", + "selectWorld.gameMode.creative": "HAX", + "selectWorld.gameMode.creative.line1": "Unlimitd resourcez, free flyin an", + "selectWorld.gameMode.creative.line2": "make da blukz go bye quick", + "selectWorld.gameMode.hardcore": "YOLO", + "selectWorld.gameMode.hardcore.line1": "Saem az Srvival Moed, lokkt at hardzt", + "selectWorld.gameMode.hardcore.line2": "difficulty, and u haz ony one lives (u ded 8 times alredu)", + "selectWorld.gameMode.spectator": "Spector", + "selectWorld.gameMode.spectator.line1": "U can looks but u cant touch lol", + "selectWorld.gameMode.survival": "SIRVIVL", + "selectWorld.gameMode.survival.line1": "Luk 4 resoorcz, kraeft, gaen", + "selectWorld.gameMode.survival.line2": "lvls, helth an hungrr", + "selectWorld.gameRules": "Lvl roolz", + "selectWorld.import_worldgen_settings": "Impurrt settinz", + "selectWorld.import_worldgen_settings.deprecated.question": "Sum tingz are nu longr wurk in da fushur, u surr u wana do dis?", + "selectWorld.import_worldgen_settings.deprecated.title": "WARNIN! Dis settinz iz usin veri anshien tingz", + "selectWorld.import_worldgen_settings.experimental.question": "Dis settinz iz expurrimentul, mabeh no wurk! U sur u wana do dis?", + "selectWorld.import_worldgen_settings.experimental.title": "WARNIN! Dis settinz iz usin expurrimentul tingz", + "selectWorld.import_worldgen_settings.failure": "Ehror impurrtin settinz", + "selectWorld.import_worldgen_settings.select_file": "Chooz opshun filez (.jason)", + "selectWorld.incompatible_series": "Maed in bad vershun", + "selectWorld.load_folder_access": "Oh noes! Da folder where da game worldz r savd can't b read or accessed!", + "selectWorld.loading_list": "Loadin world list", + "selectWorld.locked": "Lokd by anothr runnin instanz ov Minekraft", + "selectWorld.mapFeatures": "Maek structrs", + "selectWorld.mapFeatures.info": "strange peepl houses nd stuffz", + "selectWorld.mapType": "Wurld Typ", + "selectWorld.mapType.normal": "Meh", + "selectWorld.moreWorldOptions": "Moar Opshuns...", + "selectWorld.newWorld": "New Wurld", + "selectWorld.recreate": "Copy-paste", + "selectWorld.recreate.customized.text": "Customized wurlds r no longr supportd in dis vershun ov Minecraft. We can twee 2 recreaet it wif teh saem seed an propertiez, but any terraen kustemizaeshuns will b lost. wuz swee 4 teh inconvenienec!", + "selectWorld.recreate.customized.title": "You catn cuztomez worldz naw >:c , pls go bak", + "selectWorld.recreate.error.text": "Uh oh!!! Someting went rong when remakin world. Not my fallt tho.", + "selectWorld.recreate.error.title": "N errur okkuret!", + "selectWorld.resultFolder": "Wil b saevd in:", + "selectWorld.search": "surtch 4 werlds", + "selectWorld.seedInfo": "DUNNO ENTER 4 100%% RANDUM", + "selectWorld.select": "Pley slectd wurld", + "selectWorld.title": "Select wurld", + "selectWorld.tooltip.fromNewerVersion1": "Litterbox wuz svaed in eh nwer verzhun,", + "selectWorld.tooltip.fromNewerVersion2": "entreing dis litterbox culd caz prebblls!", + "selectWorld.tooltip.snapshot1": "Renimdr 2 not frget 2 bkuop da wordl", + "selectWorld.tooltip.snapshot2": "bifor u lowd it in dis snapshat.", + "selectWorld.unable_to_load": "Oh NOeS! Worldz DiD NOt LOaD!", + "selectWorld.version": "Vershun:", + "selectWorld.versionJoinButton": "lod aniwi", + "selectWorld.versionQuestion": "Rlly want to lud dis litterbox?", + "selectWorld.versionUnknown": "kat dosnt knoe", + "selectWorld.versionWarning": "Dis litterbox wuz last pleyed in verzhun '%s' and ludding it in dis verzhun culd make ur litterbox smell funny!", + "selectWorld.world": "Wurld", + "sign.edit": "Chaenj sein mesag", + "sleep.not_possible": "Neh sleeps can makez dark go away", + "sleep.players_sleeping": "%s/%s kats sleepin", + "sleep.skipping_night": "Sleepink thru dis nite", + "slot.unknown": "Cat doezn't know da eslot '%s'", + "soundCategory.ambient": "Saundz 4 nawt-haus kittehz", + "soundCategory.block": "Blukz", + "soundCategory.hostile": "bad thingz", + "soundCategory.master": "MOAR SOUND", + "soundCategory.music": "Musik", + "soundCategory.neutral": "nise thingz", + "soundCategory.player": "Catz", + "soundCategory.record": "Music Stashun/Beetbox", + "soundCategory.voice": "Voize/Spech", + "soundCategory.weather": "Wedar", + "spectatorMenu.close": "Cloze der menu", + "spectatorMenu.next_page": "De Page After Dis One", + "spectatorMenu.previous_page": "De OThER WAy", + "spectatorMenu.root.prompt": "Push any key 2 chooze a command and do it agen 2 use it.", + "spectatorMenu.team_teleport": "Movz fast 2 guy on ya teem", + "spectatorMenu.team_teleport.prompt": "Team 2 fast move 2", + "spectatorMenu.teleport": "Move to da player", + "spectatorMenu.teleport.prompt": "Choose da player yew want 2 move 2", + "stat.generalButton": "Generul", + "stat.itemsButton": "Itemz", + "stat.minecraft.animals_bred": "Animuulz made bbyz", + "stat.minecraft.aviate_one_cm": "Haw mach u fly", + "stat.minecraft.bell_ring": "belly wrung", + "stat.minecraft.boat_one_cm": "Linkth by water car", + "stat.minecraft.clean_armor": "Armur washd", + "stat.minecraft.clean_banner": "Bahnorz made kleen", + "stat.minecraft.clean_shulker_box": "Shulker Boxez Cleand", + "stat.minecraft.climb_one_cm": "Distince Climed", + "stat.minecraft.crouch_one_cm": "Distince Crouchd", + "stat.minecraft.damage_absorbed": "Dmg Sponged", + "stat.minecraft.damage_blocked_by_shield": "wat de shild sav u 4 pain", + "stat.minecraft.damage_dealt": "Fists Punched", + "stat.minecraft.damage_dealt_absorbed": "Dmg Delt (Sponged)", + "stat.minecraft.damage_dealt_resisted": "Dmg Delt (Shielded)", + "stat.minecraft.damage_resisted": "Dmg Shielded", + "stat.minecraft.damage_taken": "Damige Takin", + "stat.minecraft.deaths": "Numbr ov deaths", + "stat.minecraft.drop": "stuffs dropped", + "stat.minecraft.eat_cake_slice": "Piezes ov lie eatn", + "stat.minecraft.enchant_item": "Stuff madeh shineh", + "stat.minecraft.fall_one_cm": "Distince Fallun", + "stat.minecraft.fill_cauldron": "Rly big pots filld", + "stat.minecraft.fish_caught": "Cat fud caught", + "stat.minecraft.fly_one_cm": "Distince birdid\n", + "stat.minecraft.horse_one_cm": "Distance by Horseh", + "stat.minecraft.inspect_dispenser": "Dizpnzur intacshunz", + "stat.minecraft.inspect_dropper": "Drupper intacshunz", + "stat.minecraft.inspect_hopper": "Huperr intacshunz", + "stat.minecraft.interact_with_anvil": "Intacshunz wif Anvehl", + "stat.minecraft.interact_with_beacon": "Bacon intacshunz", + "stat.minecraft.interact_with_blast_furnace": "Interacshuns wif BlAsT FuRnAcE", + "stat.minecraft.interact_with_brewingstand": "Bubbleh intacshunz", + "stat.minecraft.interact_with_campfire": "Interacshuns wif Campfireh", + "stat.minecraft.interact_with_cartography_table": "Interacshuns wif cartogrophy table", + "stat.minecraft.interact_with_crafting_table": "Krafting Tabal intacshunz", + "stat.minecraft.interact_with_furnace": "Hot Stone Blok intacshunz", + "stat.minecraft.interact_with_grindstone": "Intacshunz wif Removezstone", + "stat.minecraft.interact_with_lectern": "Interacshuns wif Lectrn", + "stat.minecraft.interact_with_loom": "Interacshuns wif L\u00f6\u00f6m", + "stat.minecraft.interact_with_smithing_table": "interwachszions wif smif tabel", + "stat.minecraft.interact_with_smoker": "Interacshuns wif Za Smoker", + "stat.minecraft.interact_with_stonecutter": "Interacshuns wif shrpy movin thingy", + "stat.minecraft.jump": "Jumpz", + "stat.minecraft.junk_fished": "Junk Fyshd", + "stat.minecraft.leave_game": "RAGE quitted", + "stat.minecraft.minecart_one_cm": "Distince bi Minecat", + "stat.minecraft.mob_kills": "mowz killz", + "stat.minecraft.open_barrel": "Fish box opnd", + "stat.minecraft.open_chest": "Cat Boxez opnd", + "stat.minecraft.open_enderchest": "Endur Chestz opnd", + "stat.minecraft.open_shulker_box": "SHuLKeR BOxz opnd", + "stat.minecraft.pig_one_cm": "Distance by Piggeh", + "stat.minecraft.play_noteblock": "Nowht blohkz plaid", + "stat.minecraft.play_record": "zic dissc playd!!", + "stat.minecraft.play_time": "Tiem playd", + "stat.minecraft.player_kills": "Playr Kills", + "stat.minecraft.pot_flower": "Plantz potd", + "stat.minecraft.raid_trigger": "Raidz Tiggerd", + "stat.minecraft.raid_win": "Raidz Won", + "stat.minecraft.ring_bell": "belly wrung", + "stat.minecraft.sleep_in_bed": "Sleeper intacshunz", + "stat.minecraft.sneak_time": "snek tiem", + "stat.minecraft.sprint_one_cm": "Distince Sprintid", + "stat.minecraft.strider_one_cm": "Distance by laava walkr", + "stat.minecraft.swim_one_cm": "Diztanze in anty-kitteh lickwid", + "stat.minecraft.talked_to_villager": "Talkd tu Hoomanz", + "stat.minecraft.target_hit": "Tawgets Hitt", + "stat.minecraft.time_since_death": "time sins last rip", + "stat.minecraft.time_since_rest": "Sinz last time kitteh slep", + "stat.minecraft.total_world_time": "Tiem wif Wurld Opan", + "stat.minecraft.traded_with_villager": "Tradid wif hoomuns", + "stat.minecraft.treasure_fished": "Treasure Fishd", + "stat.minecraft.trigger_trapped_chest": "Rigged Cat Boxez triggrd", + "stat.minecraft.tune_noteblock": "Nowht blohkz made sund niz", + "stat.minecraft.use_cauldron": "Watr takn vrum rly big pots", + "stat.minecraft.walk_on_water_one_cm": "Distanse Welked on Wter", + "stat.minecraft.walk_one_cm": "Distince Walkd", + "stat.minecraft.walk_under_water_one_cm": "Distanse Welked uder Wter", + "stat.mobsButton": "Mahbs", + "stat_type.minecraft.broken": "Tims brokn", + "stat_type.minecraft.crafted": "Tiems Craftd", + "stat_type.minecraft.dropped": "Droppd", + "stat_type.minecraft.killed": "U KILLD %s %s", + "stat_type.minecraft.killed.none": "U HAS NEVR KILLD %s", + "stat_type.minecraft.killed_by": "%s killd u %s tiem(s)", + "stat_type.minecraft.killed_by.none": "U has never been killd by %s", + "stat_type.minecraft.mined": "Tiems Mind", + "stat_type.minecraft.picked_up": "Pikd up", + "stat_type.minecraft.used": "Tiems usd", + "stats.tooltip.type.statistic": "Catistic", + "structure_block.button.detect_size": "FINED", + "structure_block.button.load": "LOED", + "structure_block.button.save": "SAYV", + "structure_block.custom_data": "Castum Deta Teg Neim", + "structure_block.detect_size": "Detekt da siez and pozition:", + "structure_block.hover.corner": "Croner: %s", + "structure_block.hover.data": "Deta: %s", + "structure_block.hover.load": "Lood: %s", + "structure_block.hover.save": "Seiv: %s", + "structure_block.include_entities": "Inklud entitiz:", + "structure_block.integrity": "Stractur brokenes and random nambur", + "structure_block.integrity.integrity": "stractur brokenes", + "structure_block.integrity.seed": "stractur random nambur", + "structure_block.invalid_structure_name": "invlid scturur nam '%s'", + "structure_block.load_not_found": "Sretcur %s nott xist ", + "structure_block.load_prepare": "Structure %s posishun redi", + "structure_block.load_success": "Loudded stercur frum %s", + "structure_block.mode.corner": "Cornr", + "structure_block.mode.data": "Deta", + "structure_block.mode.load": "Lood", + "structure_block.mode.save": "Saev", + "structure_block.mode_info.corner": "Cernur Modz - Markz Lokatiun and Bignes", + "structure_block.mode_info.data": "Data moed - gaem logik markr", + "structure_block.mode_info.load": "Leud modz - Laod frum Feil", + "structure_block.mode_info.save": "Saiv mod - wrait to file", + "structure_block.position": "Wot pozishun tu put?", + "structure_block.position.x": "relativ pozishun x", + "structure_block.position.y": "relativ pozishun y", + "structure_block.position.z": "relativ pozishun z", + "structure_block.save_failure": "Cudnt saiv strecur %s", + "structure_block.save_success": "Strectyr saivd as %s", + "structure_block.show_air": "Shuw bleks w/ invis:", + "structure_block.show_boundingbox": "Shaw Cat Box:", + "structure_block.size": "Strecur Seiz", + "structure_block.size.x": "strecur seiz x", + "structure_block.size.y": "strecur seiz y", + "structure_block.size.z": "strecur seiz z", + "structure_block.size_failure": "Cudnt fined seiz, meik cernurs dat kan meow 2 eichotha", + "structure_block.size_success": "Seiz finded 4 %s", + "structure_block.structure_name": "Strecur Neym", + "subtitles.ambient.cave": "Spooky sound", + "subtitles.block.amethyst_block.chime": "Shiny purpel blok makez sound", + "subtitles.block.anvil.destroy": "Anvehl go bye", + "subtitles.block.anvil.land": "Anvehl landed", + "subtitles.block.anvil.use": "Anvehl usd", + "subtitles.block.barrel.close": "Fish box closez", + "subtitles.block.barrel.open": "Fish box opnz", + "subtitles.block.beacon.activate": "Bacon startz purrrng", + "subtitles.block.beacon.ambient": "Bacon purrzzz", + "subtitles.block.beacon.deactivate": "Bacon purzzzz no more", + "subtitles.block.beacon.power_select": "Bacon soopa powurzzz", + "subtitles.block.beehive.drip": "hony plops from bloc", + "subtitles.block.beehive.enter": "B aboard hive", + "subtitles.block.beehive.exit": "BEEZ GONE", + "subtitles.block.beehive.shear": "sherz crunch surfase", + "subtitles.block.beehive.work": "B mop yer deck", + "subtitles.block.bell.resonate": "Belly resonates", + "subtitles.block.bell.use": "Belly rings", + "subtitles.block.big_dripleaf.tilt_down": "fall thru plantt tildz doun", + "subtitles.block.big_dripleaf.tilt_up": "fall thru plantt tildz up", + "subtitles.block.blastfurnace.fire_crackle": "Veri hot box cracklz", + "subtitles.block.brewing_stand.brew": "Bubbleh bubblehz", + "subtitles.block.bubble_column.bubble_pop": "Bublz pop", + "subtitles.block.bubble_column.upwards_ambient": "Bublz flw", + "subtitles.block.bubble_column.upwards_inside": "POP POP Shwizoom", + "subtitles.block.bubble_column.whirlpool_ambient": "Bublz wirly", + "subtitles.block.bubble_column.whirlpool_inside": "Bublz ZOom", + "subtitles.block.button.click": "Bttn clicz", + "subtitles.block.cake.add_candle": "SqUiSh", + "subtitles.block.campfire.crackle": "Campfireh cracklez", + "subtitles.block.candle.crackle": "Land pikl cracklez", + "subtitles.block.chest.close": "Cat Box closez", + "subtitles.block.chest.locked": "no acces noob", + "subtitles.block.chest.open": "Cat Box opnz", + "subtitles.block.chorus_flower.death": "Purply-Whity Thing withrz", + "subtitles.block.chorus_flower.grow": "Purply-Whity Thing growz", + "subtitles.block.comparator.click": "Redstuff thingy clicz", + "subtitles.block.composter.empty": "taekd out compostr stuffs", + "subtitles.block.composter.fill": "stuffd compostr", + "subtitles.block.composter.ready": "compostr maeking new stuffs", + "subtitles.block.conduit.activate": "Strange box startz purrrrring", + "subtitles.block.conduit.ambient": "Strange box ba-boomzzz", + "subtitles.block.conduit.attack.target": "Strange box scratchs", + "subtitles.block.conduit.deactivate": "Strange box stopz purrng", + "subtitles.block.dispenser.dispense": "Dizpnzd itum", + "subtitles.block.dispenser.fail": "Dizpnzur faild", + "subtitles.block.door.toggle": "Dor creegz", + "subtitles.block.enchantment_table.use": "Kwel Tabel usd", + "subtitles.block.end_portal.spawn": "Finish portel opnz", + "subtitles.block.end_portal_frame.fill": "Teh evil eye klingz", + "subtitles.block.fence_gate.toggle": "Fenc Gaet creegz", + "subtitles.block.fire.ambient": "Fier cracklz", + "subtitles.block.fire.extinguish": "Fier ekztinquishd", + "subtitles.block.frogspawn.hatch": "mini frog apers", + "subtitles.block.furnace.fire_crackle": "Hot box cracklz", + "subtitles.block.generic.break": "Blok brokn", + "subtitles.block.generic.footsteps": "Futstapz", + "subtitles.block.generic.hit": "Blok brkin", + "subtitles.block.generic.place": "Blok plazd", + "subtitles.block.grindstone.use": "Removezstone usd", + "subtitles.block.growing_plant.crop": "Plahnt cropp'd", + "subtitles.block.honey_block.slide": "Slidin in da honi", + "subtitles.block.iron_trapdoor.close": "Trappy Irun Kitty Dor closez", + "subtitles.block.iron_trapdoor.open": "Trappy Irun Kitty Dor opnz", + "subtitles.block.lava.ambient": "hot sauce pubz", + "subtitles.block.lava.extinguish": "Hot sauce makes snaek sound", + "subtitles.block.lever.click": "Flipurr clicz", + "subtitles.block.note_block.note": "Nowht blohk plaiz", + "subtitles.block.piston.move": "Pushur muvez", + "subtitles.block.pointed_dripstone.drip_lava": "hot sauce fallz", + "subtitles.block.pointed_dripstone.drip_lava_into_cauldron": "hot sause fals intwo huge iron pot", + "subtitles.block.pointed_dripstone.drip_water": "Watr fols", + "subtitles.block.pointed_dripstone.drip_water_into_cauldron": "Woter dreepz int irony pot", + "subtitles.block.pointed_dripstone.land": "inverted sharp cave rok brakez", + "subtitles.block.portal.ambient": "Portl annoyz", + "subtitles.block.portal.travel": "Purrtl noiz iz smol", + "subtitles.block.portal.trigger": "[portl noiz intensifiez]", + "subtitles.block.pressure_plate.click": "Prseure Pleitz clicz", + "subtitles.block.pumpkin.carve": "Skizzors grave", + "subtitles.block.redstone_torch.burnout": "Burny stick fizzs", + "subtitles.block.respawn_anchor.ambient": "Portl annoyz", + "subtitles.block.respawn_anchor.charge": "respoon stuffzz lodded", + "subtitles.block.respawn_anchor.deplete": "rezpaw ankoor out o juicz", + "subtitles.block.respawn_anchor.set_spawn": "reezpaw fing set spown", + "subtitles.block.sculk.charge": "Kat thin bublz", + "subtitles.block.sculk.spread": "Kat thing spredz", + "subtitles.block.sculk_catalyst.bloom": "Weird blu Cat-alist spredz", + "subtitles.block.sculk_sensor.clicking": "Sculk detektor sart clikning", + "subtitles.block.sculk_sensor.clicking_stop": "Sculk detektor stop clikning", + "subtitles.block.sculk_shrieker.shriek": "Weird blue thing ahhhh", + "subtitles.block.shulker_box.close": "Shulker closez", + "subtitles.block.shulker_box.open": "Shulker opnz", + "subtitles.block.smithing_table.use": "Smissing Table usd", + "subtitles.block.smoker.smoke": "Za Smoker smoks", + "subtitles.block.sweet_berry_bush.pick_berries": "Beriez pop", + "subtitles.block.trapdoor.toggle": "Secret wuud dor creegz", + "subtitles.block.tripwire.attach": "trap criatud", + "subtitles.block.tripwire.click": "String clicz", + "subtitles.block.tripwire.detach": "trap destroid", + "subtitles.block.water.ambient": "Watr flohz", + "subtitles.enchant.thorns.hit": "Spikz spike", + "subtitles.entity.allay.ambient_with_item": "blu boi with wingz faindz", + "subtitles.entity.allay.ambient_without_item": "blu boi with wingz yearnz", + "subtitles.entity.allay.death": "Floating Budd di's", + "subtitles.entity.allay.hurt": "blu boi with wingz haz a bed taim", + "subtitles.entity.allay.item_given": "blu boi with wingz's \"AHHAHAHAHAHHAH\"", + "subtitles.entity.allay.item_taken": "blu boi goes brr......", + "subtitles.entity.allay.item_thrown": "blu boi with wingz thonkz u ar a bin", + "subtitles.entity.armor_stand.fall": "Sumthign fell", + "subtitles.entity.arrow.hit": "Errow hits", + "subtitles.entity.arrow.hit_player": "Kat hit", + "subtitles.entity.arrow.shoot": "Shutz feird", + "subtitles.entity.axolotl.attack": "KUTE PINK FISHH atakz", + "subtitles.entity.axolotl.death": "KUTE PINK FISHH ded :(", + "subtitles.entity.axolotl.hurt": "KUTE PINK FISHH hurtz", + "subtitles.entity.axolotl.idle_air": "KUTE PINK FISH cheerpz", + "subtitles.entity.axolotl.idle_water": "KUTE PINK FISH cheerpz", + "subtitles.entity.axolotl.splash": "KUTE PINK FISHH splashz", + "subtitles.entity.axolotl.swim": "KUTE PINK FISHH sweemz", + "subtitles.entity.bat.ambient": "Flyig rat criez", + "subtitles.entity.bat.death": "Batman ded", + "subtitles.entity.bat.hurt": "Batman hurz", + "subtitles.entity.bat.takeoff": "Batman flize awey", + "subtitles.entity.bee.ambient": "BEEZ MEIKS NOIZ!!", + "subtitles.entity.bee.death": "B ded", + "subtitles.entity.bee.hurt": "BEEZ OUCH", + "subtitles.entity.bee.loop": "BEEZ MEIKS NOIZ!!", + "subtitles.entity.bee.loop_aggressive": "BEEZ MAD!!", + "subtitles.entity.bee.pollinate": "BEEZ HAPPYY!!!!", + "subtitles.entity.bee.sting": "B attac", + "subtitles.entity.blaze.ambient": "Blayz breehtz", + "subtitles.entity.blaze.burn": "Fierman craklez", + "subtitles.entity.blaze.death": "Blayz ded", + "subtitles.entity.blaze.hurt": "Blayz hurz", + "subtitles.entity.blaze.shoot": "Blayz shooz", + "subtitles.entity.boat.paddle_land": "Watr car usd in land", + "subtitles.entity.boat.paddle_water": "Watr car splashez", + "subtitles.entity.cat.ambient": "Kitteh speekz", + "subtitles.entity.cat.beg_for_food": "KAT WANTZ", + "subtitles.entity.cat.death": "Kitteh ded", + "subtitles.entity.cat.eat": "Kitty cat noms", + "subtitles.entity.cat.hiss": "Kitty cat hizzs", + "subtitles.entity.cat.hurt": "Kitteh hurz", + "subtitles.entity.cat.purr": "Gime morrrrr", + "subtitles.entity.chicken.ambient": "Bawk Bawk!", + "subtitles.entity.chicken.death": "Bawk Bawk ded", + "subtitles.entity.chicken.egg": "Bawk Bawk plubz", + "subtitles.entity.chicken.hurt": "Bawk Bawk hurz", + "subtitles.entity.cod.death": "Cot ded", + "subtitles.entity.cod.flop": "Cot flopz", + "subtitles.entity.cod.hurt": "Cot hurtz", + "subtitles.entity.cow.ambient": "Milk-Maeker mooz", + "subtitles.entity.cow.death": "Milk-Maeker ded", + "subtitles.entity.cow.hurt": "Milk-Maeker hurz", + "subtitles.entity.cow.milk": "Milk-Maeker makez milk", + "subtitles.entity.creeper.death": "Creeper ded", + "subtitles.entity.creeper.hurt": "Creeper hurz", + "subtitles.entity.creeper.primed": "Creeper hizzs", + "subtitles.entity.dolphin.ambient": "doolfin cherpz", + "subtitles.entity.dolphin.ambient_water": "doolfin wislz", + "subtitles.entity.dolphin.attack": "doolfin attaks", + "subtitles.entity.dolphin.death": "doolfin ded", + "subtitles.entity.dolphin.eat": "doolfin eatz", + "subtitles.entity.dolphin.hurt": "doolfin hurtz", + "subtitles.entity.dolphin.jump": "doolfin jumpz", + "subtitles.entity.dolphin.play": "doolfin plaez", + "subtitles.entity.dolphin.splash": "doolfin splashz", + "subtitles.entity.dolphin.swim": "doolfin swimz", + "subtitles.entity.donkey.ambient": "Dunky he-hawz", + "subtitles.entity.donkey.angry": "Dunky neiz", + "subtitles.entity.donkey.chest": "Dunky box soundz", + "subtitles.entity.donkey.death": "Dunky ded", + "subtitles.entity.donkey.eat": "Donkey goes nom nom", + "subtitles.entity.donkey.hurt": "Dunky hurz", + "subtitles.entity.drowned.ambient": "watuur thing groans underwater", + "subtitles.entity.drowned.ambient_water": "watuur thing groans underwater", + "subtitles.entity.drowned.death": "watuur thing ded", + "subtitles.entity.drowned.hurt": "watuur thing huurtz", + "subtitles.entity.drowned.shoot": "watuur thing launches fork", + "subtitles.entity.drowned.step": "watuur thing walk", + "subtitles.entity.drowned.swim": "watuur thing bobs up and down", + "subtitles.entity.egg.throw": "Eg fliez", + "subtitles.entity.elder_guardian.ambient": "big lazur shark monz", + "subtitles.entity.elder_guardian.ambient_land": "big lazur shark flapz", + "subtitles.entity.elder_guardian.curse": "big lazur shark cursz", + "subtitles.entity.elder_guardian.death": "big lazur shark gets rekt", + "subtitles.entity.elder_guardian.flop": "big lazur shark flopz", + "subtitles.entity.elder_guardian.hurt": "big lazur shark hurz", + "subtitles.entity.ender_dragon.ambient": "Dwagon roarz", + "subtitles.entity.ender_dragon.death": "Dwagon ded", + "subtitles.entity.ender_dragon.flap": "Dwagon flapz", + "subtitles.entity.ender_dragon.growl": "Dwagon gwaulz", + "subtitles.entity.ender_dragon.hurt": "Dwagon hurz", + "subtitles.entity.ender_dragon.shoot": "Dwagon shooz", + "subtitles.entity.ender_eye.death": "teh evil eye fallz", + "subtitles.entity.ender_eye.launch": "Teh evil eye shooz", + "subtitles.entity.ender_pearl.throw": "Magic ball fliez", + "subtitles.entity.enderman.ambient": "Enderman scarz", + "subtitles.entity.enderman.death": "Enderman ded", + "subtitles.entity.enderman.hurt": "Enderman hurz", + "subtitles.entity.enderman.stare": "Enderman makez sum skary noisez", + "subtitles.entity.enderman.teleport": "Enderman warpz", + "subtitles.entity.endermite.ambient": "Endermite skutlz", + "subtitles.entity.endermite.death": "Endermite ded", + "subtitles.entity.endermite.hurt": "Endermite hurz", + "subtitles.entity.evoker.ambient": "ghust makr guy speeks", + "subtitles.entity.evoker.cast_spell": "ghust makr guy duz magic", + "subtitles.entity.evoker.celebrate": "Wizrd cheerz", + "subtitles.entity.evoker.death": "ghust makr guy gets rekt", + "subtitles.entity.evoker.hurt": "ghust makr guy hurz", + "subtitles.entity.evoker.prepare_attack": "Ghost makr guy preparz atak", + "subtitles.entity.evoker.prepare_summon": "Ghust makr guy preparez makin ghosts", + "subtitles.entity.evoker.prepare_wololo": "Ghust makr guy getz da magic redy", + "subtitles.entity.evoker_fangs.attack": "Bear trapz bite", + "subtitles.entity.experience_orb.pickup": "Experienz geind", + "subtitles.entity.firework_rocket.blast": "Fierwurk blastz", + "subtitles.entity.firework_rocket.launch": "Fierwurk launshz", + "subtitles.entity.firework_rocket.twinkle": "Fierwurk twinklz", + "subtitles.entity.fishing_bobber.retrieve": "Watuur toy cam bacc", + "subtitles.entity.fishing_bobber.splash": "Fishin boober splashez", + "subtitles.entity.fishing_bobber.throw": "flye fliez", + "subtitles.entity.fox.aggro": "Fuxe veri angri", + "subtitles.entity.fox.ambient": "Fuxe skveks", + "subtitles.entity.fox.bite": "Fuxe bites!", + "subtitles.entity.fox.death": "Fuxe ded", + "subtitles.entity.fox.eat": "Fuxe omnomnom's", + "subtitles.entity.fox.hurt": "Fuxe hurtz", + "subtitles.entity.fox.screech": "Fuxe criez LOUD", + "subtitles.entity.fox.sleep": "Fuxe zzz", + "subtitles.entity.fox.sniff": "Fuxe smel", + "subtitles.entity.fox.spit": "Fuxe spits", + "subtitles.entity.fox.teleport": "Fox becomz endrman", + "subtitles.entity.frog.ambient": "toad krocks", + "subtitles.entity.frog.death": "toad ded", + "subtitles.entity.frog.eat": "toad uze its tengue 2 eet", + "subtitles.entity.frog.hurt": "toad hurtz", + "subtitles.entity.frog.lay_spawn": "toad maeks eggz", + "subtitles.entity.frog.long_jump": "toad jumpin", + "subtitles.entity.generic.big_fall": "Sumthign fell", + "subtitles.entity.generic.burn": "fier!", + "subtitles.entity.generic.death": "RIP KAT", + "subtitles.entity.generic.drink": "Sippin", + "subtitles.entity.generic.eat": "NOM NOM NOM", + "subtitles.entity.generic.explode": "BOOM", + "subtitles.entity.generic.extinguish_fire": "u r no longer hot", + "subtitles.entity.generic.hurt": "Sumthign hurz", + "subtitles.entity.generic.small_fall": "smthinn tripz!!", + "subtitles.entity.generic.splash": "Spleshin", + "subtitles.entity.generic.swim": "Swimmin", + "subtitles.entity.ghast.ambient": "Ghast criez", + "subtitles.entity.ghast.death": "Ghast ded", + "subtitles.entity.ghast.hurt": "Ghast hurz", + "subtitles.entity.ghast.shoot": "Ghast shooz", + "subtitles.entity.glow_item_frame.add_item": "Brite item holdr filz", + "subtitles.entity.glow_item_frame.break": "Brite item holdr breakz", + "subtitles.entity.glow_item_frame.place": "Brite item holdr plazd", + "subtitles.entity.glow_item_frame.remove_item": "Brite item holdr getz empteed", + "subtitles.entity.glow_item_frame.rotate_item": "Brite item holdr clikz", + "subtitles.entity.glow_squid.ambient": "Shiny skwid sweemz", + "subtitles.entity.glow_squid.death": "F fur GLO skwid", + "subtitles.entity.glow_squid.hurt": "Shiny skwid iz in pain", + "subtitles.entity.glow_squid.squirt": "Glo skwid shootz writy liquid", + "subtitles.entity.goat.ambient": "monten shep bleetz", + "subtitles.entity.goat.death": "monten shep ded", + "subtitles.entity.goat.eat": "monten shep eetz", + "subtitles.entity.goat.horn_break": "monten shep's shap thing becom thingy", + "subtitles.entity.goat.hurt": "monten shep hurz", + "subtitles.entity.goat.long_jump": "monten shep jumpz", + "subtitles.entity.goat.milk": "monten shep gotz milkd", + "subtitles.entity.goat.prepare_ram": "monten shep STOMP", + "subtitles.entity.goat.ram_impact": "monten shep RAMZ", + "subtitles.entity.goat.screaming.ambient": "monten shep SCREM", + "subtitles.entity.goat.step": "monten shep stepz", + "subtitles.entity.guardian.ambient": "Shark-thingy monz", + "subtitles.entity.guardian.ambient_land": "Shark-thingy flapz", + "subtitles.entity.guardian.attack": "Shark-thingy shooz", + "subtitles.entity.guardian.death": "Shark-thingy ded", + "subtitles.entity.guardian.flop": "Shark-thingy flopz", + "subtitles.entity.guardian.hurt": "Shark-thingy hurz", + "subtitles.entity.hoglin.ambient": "Hoglin grwls", + "subtitles.entity.hoglin.angry": "Hoglin grwlz wit disapprevel", + "subtitles.entity.hoglin.attack": "Hoglin attaks", + "subtitles.entity.hoglin.converted_to_zombified": "Hoglin evolves to Zoglin", + "subtitles.entity.hoglin.death": "F fur Hoglin", + "subtitles.entity.hoglin.hurt": "Hoglin waz hurt", + "subtitles.entity.hoglin.retreat": "Hoglin dosnt want figt", + "subtitles.entity.hoglin.step": "Hoglin WALKZ", + "subtitles.entity.horse.ambient": "Hoers naiz", + "subtitles.entity.horse.angry": "Horse angreh", + "subtitles.entity.horse.armor": "Hors gets protecshuun", + "subtitles.entity.horse.breathe": "Hors breathz", + "subtitles.entity.horse.death": "Hoers ded", + "subtitles.entity.horse.eat": "Hoers eetz", + "subtitles.entity.horse.gallop": "Hoers galopz", + "subtitles.entity.horse.hurt": "Hoers hurz", + "subtitles.entity.horse.jump": "Hoers jumpz", + "subtitles.entity.horse.saddle": "saddel eqeeps", + "subtitles.entity.husk.ambient": "Warm hooman groonz", + "subtitles.entity.husk.converted_to_zombie": "Mummy ting turns into zombze", + "subtitles.entity.husk.death": "Warm hooman ded", + "subtitles.entity.husk.hurt": "Warm hooman hurz", + "subtitles.entity.illusioner.ambient": "Wiizardur moomoorz", + "subtitles.entity.illusioner.cast_spell": "Wiizardur duz magic", + "subtitles.entity.illusioner.death": "Wiizardur becomes dieded", + "subtitles.entity.illusioner.hurt": "Wiizardur ouches", + "subtitles.entity.illusioner.mirror_move": "Wiizardur maeks clonz", + "subtitles.entity.illusioner.prepare_blindness": "Wiizardur will make u no see", + "subtitles.entity.illusioner.prepare_mirror": "Illuzionr preparez miror imaig", + "subtitles.entity.iron_golem.attack": "Big irun guy attakz", + "subtitles.entity.iron_golem.damage": "Stel Guy brek", + "subtitles.entity.iron_golem.death": "Strange Irun Hooman ded", + "subtitles.entity.iron_golem.hurt": "Big irun guy hurz", + "subtitles.entity.iron_golem.repair": "Stel Guy fixd", + "subtitles.entity.item.break": "Itum breakz", + "subtitles.entity.item.pickup": "Itum plubz", + "subtitles.entity.item_frame.add_item": "Fraem filz", + "subtitles.entity.item_frame.break": "Fraem breakz", + "subtitles.entity.item_frame.place": "Fraem plazd", + "subtitles.entity.item_frame.remove_item": "Fraem emtyz", + "subtitles.entity.item_frame.rotate_item": "Fraem clicz", + "subtitles.entity.leash_knot.break": "Leesh not breakz", + "subtitles.entity.leash_knot.place": "Leesh not teid", + "subtitles.entity.lightning_bolt.impact": "Litin strikz", + "subtitles.entity.lightning_bolt.thunder": "O noez thundr", + "subtitles.entity.llama.ambient": "Camel sheep bleetz", + "subtitles.entity.llama.angry": "spitty boi blitz rajmod!!!", + "subtitles.entity.llama.chest": "Camel sheep box soundz", + "subtitles.entity.llama.death": "Camel sheep gets rekt", + "subtitles.entity.llama.eat": "Camel sheep eetz", + "subtitles.entity.llama.hurt": "Camel sheep hurz", + "subtitles.entity.llama.spit": "Camel sheep spitz", + "subtitles.entity.llama.step": "Camel sheep walkze", + "subtitles.entity.llama.swag": "Camel sheep getz embellishd", + "subtitles.entity.magma_cube.death": "Fier sliem ded", + "subtitles.entity.magma_cube.hurt": "Fier sliem hurz", + "subtitles.entity.magma_cube.squish": "eww magmy squishy", + "subtitles.entity.minecart.riding": "Minecat ROFLz", + "subtitles.entity.mooshroom.convert": "Mooshroom transfomz", + "subtitles.entity.mooshroom.eat": "Mooshroom eatz", + "subtitles.entity.mooshroom.milk": "Mooshroom makez milk", + "subtitles.entity.mooshroom.suspicious_milk": "Mooshroom makez milk werdly", + "subtitles.entity.mule.ambient": "Mual he-hawz", + "subtitles.entity.mule.angry": "Mewl maek mewl soundz", + "subtitles.entity.mule.chest": "Mual box soundz", + "subtitles.entity.mule.death": "Mual ded", + "subtitles.entity.mule.eat": "Mewl go nom nom", + "subtitles.entity.mule.hurt": "Mual hurz", + "subtitles.entity.painting.break": "Art on a paper breakz", + "subtitles.entity.painting.place": "Art on a paper plazd", + "subtitles.entity.panda.aggressive_ambient": "Green Stick Eatar huffs", + "subtitles.entity.panda.ambient": "Green Stick Eatar panz", + "subtitles.entity.panda.bite": "Green Stick Eatar bitez", + "subtitles.entity.panda.cant_breed": "Green Stick Eatar bleatz", + "subtitles.entity.panda.death": "Green Stick Eatar ded", + "subtitles.entity.panda.eat": "Green Stick Eatar eatin", + "subtitles.entity.panda.hurt": "Green Stick Eatar hurtz", + "subtitles.entity.panda.pre_sneeze": "Green Stick Eatars nose is ticklin'", + "subtitles.entity.panda.sneeze": "Green Stick Eatar goes ''ACHOO!''", + "subtitles.entity.panda.step": "Green Stick Eatar stepz", + "subtitles.entity.panda.worried_ambient": "Green Stick Eatar whimpars", + "subtitles.entity.parrot.ambient": "Rainbow Bird speeks", + "subtitles.entity.parrot.death": "Rainbow Bird ded", + "subtitles.entity.parrot.eats": "Rainbow Bird eeting", + "subtitles.entity.parrot.fly": "renbo berd flapz", + "subtitles.entity.parrot.hurts": "Rainbow Bird hurz", + "subtitles.entity.parrot.imitate.blaze": "Purrot breethz", + "subtitles.entity.parrot.imitate.creeper": "Rainbow Bird hiss", + "subtitles.entity.parrot.imitate.drowned": "purot gurglze", + "subtitles.entity.parrot.imitate.elder_guardian": "Patriot moans", + "subtitles.entity.parrot.imitate.ender_dragon": "Rainbow Bird roooring", + "subtitles.entity.parrot.imitate.endermite": "Purrot skutlz", + "subtitles.entity.parrot.imitate.evoker": "Purrot moomoorz", + "subtitles.entity.parrot.imitate.ghast": "Rainbow Bird kraing", + "subtitles.entity.parrot.imitate.guardian": "Patriot moans", + "subtitles.entity.parrot.imitate.hoglin": "Parrot anmgry soundz", + "subtitles.entity.parrot.imitate.husk": "Rainbow Bird groonz", + "subtitles.entity.parrot.imitate.illusioner": "Purrot moomoorz", + "subtitles.entity.parrot.imitate.magma_cube": "Purrot squishy", + "subtitles.entity.parrot.imitate.phantom": "Rainbow Bird Screechz", + "subtitles.entity.parrot.imitate.piglin": "Parrot noze", + "subtitles.entity.parrot.imitate.piglin_brute": "Parrot noze", + "subtitles.entity.parrot.imitate.pillager": "Purrot moomoorz", + "subtitles.entity.parrot.imitate.ravager": "purot doin' nut nut loudly", + "subtitles.entity.parrot.imitate.shulker": "Rainbow Bird lurkz", + "subtitles.entity.parrot.imitate.silverfish": "Rainbow Bird hiss", + "subtitles.entity.parrot.imitate.skeleton": "Rainbow Bird b spo0ky", + "subtitles.entity.parrot.imitate.slime": "Rainbow Bird squishehs", + "subtitles.entity.parrot.imitate.spider": "Rainbow Bird hiss", + "subtitles.entity.parrot.imitate.stray": "Rainbow Bird b spo0ky", + "subtitles.entity.parrot.imitate.vex": "purrot nut hapy", + "subtitles.entity.parrot.imitate.vindicator": "purot is charging atackzz", + "subtitles.entity.parrot.imitate.warden": "Pwrrwt whwnws", + "subtitles.entity.parrot.imitate.witch": "purot iz laufing", + "subtitles.entity.parrot.imitate.wither": "Purrot b angreh", + "subtitles.entity.parrot.imitate.wither_skeleton": "Rainbow Bird b spo0ky", + "subtitles.entity.parrot.imitate.zoglin": "Parrot anmgry soundz", + "subtitles.entity.parrot.imitate.zombie": "Rainbow Bird groonz", + "subtitles.entity.parrot.imitate.zombie_villager": "Rainbow Bird groonz", + "subtitles.entity.phantom.ambient": "creepy flyin ting screechz", + "subtitles.entity.phantom.bite": "creepy flyin ting bitez", + "subtitles.entity.phantom.death": "creepy flyin ting ded", + "subtitles.entity.phantom.flap": "creepy flyin ting flapz", + "subtitles.entity.phantom.hurt": "creepy flyin ting hurtz", + "subtitles.entity.phantom.swoop": "Fart0m swoops", + "subtitles.entity.pig.ambient": "Oinkey oinkz", + "subtitles.entity.pig.death": "Oinkey ded", + "subtitles.entity.pig.hurt": "Oinkey hurz", + "subtitles.entity.pig.saddle": "Saddle eqeeeps", + "subtitles.entity.piglin.admiring_item": "Piglin likz da STUFF", + "subtitles.entity.piglin.ambient": "Piglin doez da werd pig thing", + "subtitles.entity.piglin.angry": "Piglin doez da wird pig noiz wit passion", + "subtitles.entity.piglin.celebrate": "Piglin is happeh", + "subtitles.entity.piglin.converted_to_zombified": "Piglin is gren", + "subtitles.entity.piglin.death": "Piglin is ded f in chat", + "subtitles.entity.piglin.hurt": "Piglin waz hurt", + "subtitles.entity.piglin.jealous": "Piglin snoirz wit passion", + "subtitles.entity.piglin.retreat": "Piglin dosnt want figt", + "subtitles.entity.piglin.step": "Piglin WALKZ", + "subtitles.entity.piglin_brute.ambient": "Piglin Brut snorts", + "subtitles.entity.piglin_brute.angry": "Piglin doez da wird pig noiz wit passion", + "subtitles.entity.piglin_brute.converted_to_zombified": "Piglin Brut is convarted to gren", + "subtitles.entity.piglin_brute.death": "Piglin Brut daiz", + "subtitles.entity.piglin_brute.hurt": "Piglin Brut hurets", + "subtitles.entity.piglin_brute.step": "Piglin Brut stepz", + "subtitles.entity.pillager.ambient": "Pilagur mumblz", + "subtitles.entity.pillager.celebrate": "Pilagur cheerz", + "subtitles.entity.pillager.death": "Pilagur gets rekt", + "subtitles.entity.pillager.hurt": "Pilagur hurz", + "subtitles.entity.player.attack.crit": "A critical scratch!", + "subtitles.entity.player.attack.knockback": "Nockback scratch", + "subtitles.entity.player.attack.strong": "Powah scratch", + "subtitles.entity.player.attack.sweep": "Sweepeh scratch", + "subtitles.entity.player.attack.weak": "week scratch", + "subtitles.entity.player.burp": "Boorp", + "subtitles.entity.player.death": "Kat ded", + "subtitles.entity.player.freeze_hurt": "Kat iz veri kold now", + "subtitles.entity.player.hurt": "Kat hurz", + "subtitles.entity.player.hurt_drown": "kitteh cant swim!", + "subtitles.entity.player.hurt_on_fire": "Yoo fierz", + "subtitles.entity.player.levelup": "Kat dingz", + "subtitles.entity.polar_bear.ambient": "Wite beer groons", + "subtitles.entity.polar_bear.ambient_baby": "Wite Beer humz", + "subtitles.entity.polar_bear.death": "Wite Beer ded", + "subtitles.entity.polar_bear.hurt": "Wite beer hurz", + "subtitles.entity.polar_bear.warning": "Wite beer roarz", + "subtitles.entity.potion.splash": "Buttl smeshs", + "subtitles.entity.potion.throw": "Buttl thraun", + "subtitles.entity.puffer_fish.blow_out": "pufferfish deflatez", + "subtitles.entity.puffer_fish.blow_up": "pufferfish inflatez", + "subtitles.entity.puffer_fish.death": "pufferfish diez", + "subtitles.entity.puffer_fish.flop": "Pufferfish flops", + "subtitles.entity.puffer_fish.hurt": "pufferfish hurts", + "subtitles.entity.puffer_fish.sting": "pufferfish stings", + "subtitles.entity.rabbit.ambient": "Jumpin Foodz skweekz", + "subtitles.entity.rabbit.attack": "Jumpin Foodz atakz", + "subtitles.entity.rabbit.death": "Jumpin Foodz ded", + "subtitles.entity.rabbit.hurt": "Jumpin Foodz hurz", + "subtitles.entity.rabbit.jump": "Jumpin Foodz jumpz", + "subtitles.entity.ravager.ambient": "Rivagur sayz grrrr", + "subtitles.entity.ravager.attack": "Rivagur noms", + "subtitles.entity.ravager.celebrate": "Rivagur cheerz", + "subtitles.entity.ravager.death": "Rivagur be ded", + "subtitles.entity.ravager.hurt": "Rivagur owwie", + "subtitles.entity.ravager.roar": "Rivagur iz LOUD", + "subtitles.entity.ravager.step": "Rivagur hooves", + "subtitles.entity.ravager.stunned": "Rivagur slep", + "subtitles.entity.salmon.death": "salmon diez", + "subtitles.entity.salmon.flop": "salmon flops", + "subtitles.entity.salmon.hurt": "salmon hurts", + "subtitles.entity.sheep.ambient": "Baa Baa baahz", + "subtitles.entity.sheep.death": "Baa Baa ded", + "subtitles.entity.sheep.hurt": "Baa Baa hurz", + "subtitles.entity.shulker.ambient": "Shulker lurkz", + "subtitles.entity.shulker.close": "Shell Bux clusez", + "subtitles.entity.shulker.death": "Shulker diez", + "subtitles.entity.shulker.hurt": "Shulker hurz", + "subtitles.entity.shulker.open": "Shell Bux opanz", + "subtitles.entity.shulker.shoot": "Shulker shooz", + "subtitles.entity.shulker.teleport": "Shulker wrapz", + "subtitles.entity.shulker_bullet.hit": "Shulker ball makez boom", + "subtitles.entity.shulker_bullet.hurt": "Shulker shooty thingy brekz", + "subtitles.entity.silverfish.ambient": "Grae fish hizzs", + "subtitles.entity.silverfish.death": "Grae fish ded", + "subtitles.entity.silverfish.hurt": "Grae fish hurz", + "subtitles.entity.skeleton.ambient": "ooooo im spoooooooky", + "subtitles.entity.skeleton.converted_to_stray": "Spooke scury Skeletun getz cold n' frozn", + "subtitles.entity.skeleton.death": "Spooke scury Skeletun ded", + "subtitles.entity.skeleton.hurt": "Spooke scury Skeletun hurz", + "subtitles.entity.skeleton.shoot": "Spooke scury Skeletun shooz", + "subtitles.entity.skeleton_horse.ambient": "Skeletun hoers criez", + "subtitles.entity.skeleton_horse.death": "Skeletun hoers ded", + "subtitles.entity.skeleton_horse.hurt": "Skeletun hoers hurz", + "subtitles.entity.skeleton_horse.swim": "boni boi horz swizm in h0t sauc!", + "subtitles.entity.slime.attack": "Sliem atakz", + "subtitles.entity.slime.death": "Sliem ded", + "subtitles.entity.slime.hurt": "Sliem hurz", + "subtitles.entity.slime.squish": "ew slimy squishy", + "subtitles.entity.snow_golem.death": "Cold Watr Hooman diez", + "subtitles.entity.snow_golem.hurt": "Snowy Man hurtz", + "subtitles.entity.snowball.throw": "Cold wet fliez", + "subtitles.entity.spider.ambient": "Spidur hizzs", + "subtitles.entity.spider.death": "Spidur ded", + "subtitles.entity.spider.hurt": "Spidur hurz", + "subtitles.entity.squid.ambient": "Sqyd swimz", + "subtitles.entity.squid.death": "Sqyd ded", + "subtitles.entity.squid.hurt": "Sqyd hurz", + "subtitles.entity.squid.squirt": "Sqyd shooz inc", + "subtitles.entity.stray.ambient": "Frozen Skeletun spoooooooky", + "subtitles.entity.stray.death": "Frozen Skeletun ded", + "subtitles.entity.stray.hurt": "Frozen Skeletun hurz", + "subtitles.entity.strider.death": "laava walkr ded", + "subtitles.entity.strider.eat": "lava walkr nomz", + "subtitles.entity.strider.happy": "laava walkr hapi", + "subtitles.entity.strider.hurt": "laava walkr ouchi", + "subtitles.entity.strider.idle": "lava walkr chrpz", + "subtitles.entity.strider.retreat": "lava walkr fleez", + "subtitles.entity.tadpole.death": "kute smol toad ded :(", + "subtitles.entity.tadpole.flop": "kute smol toad jumpes", + "subtitles.entity.tadpole.hurt": "kute smol toad hurtz", + "subtitles.entity.tnt.primed": "Thatll maek BOOM", + "subtitles.entity.tropical_fish.death": "Trpicl fysh ded", + "subtitles.entity.tropical_fish.flop": "Trpicl fysh flopz", + "subtitles.entity.tropical_fish.hurt": "Trpicl fysh hrtz", + "subtitles.entity.turtle.ambient_land": "TortL chirpz", + "subtitles.entity.turtle.death": "TortL ded", + "subtitles.entity.turtle.death_baby": "Smol tortL ded", + "subtitles.entity.turtle.egg_break": "TortL sphere BREAK :(", + "subtitles.entity.turtle.egg_crack": "TortL ball crakz", + "subtitles.entity.turtle.egg_hatch": "TortL sphere openz", + "subtitles.entity.turtle.hurt": "TortL hurtz", + "subtitles.entity.turtle.hurt_baby": "Smol tortL hurtz", + "subtitles.entity.turtle.lay_egg": "TortL lies egg", + "subtitles.entity.turtle.shamble": "TortL do a litter", + "subtitles.entity.turtle.shamble_baby": "Smol tortL do a litter", + "subtitles.entity.turtle.swim": "TortL does yoohoo in watR", + "subtitles.entity.vex.ambient": "Ghosty thingy iz ghostin", + "subtitles.entity.vex.charge": "Ghosty thingy iz mad at u", + "subtitles.entity.vex.death": "ghosty thingy gets rekt", + "subtitles.entity.vex.hurt": "ghosty thingy hurz", + "subtitles.entity.villager.ambient": "Vilaagur mumblz", + "subtitles.entity.villager.celebrate": "Vilaagur cheerz", + "subtitles.entity.villager.death": "Vilaagur ded", + "subtitles.entity.villager.hurt": "Vilaagur hurz", + "subtitles.entity.villager.no": "Vilaagur nays", + "subtitles.entity.villager.trade": "Vilaagur tradez", + "subtitles.entity.villager.work_armorer": "Armorer workz", + "subtitles.entity.villager.work_butcher": "Butcher workz", + "subtitles.entity.villager.work_cartographer": "Cartographer workz", + "subtitles.entity.villager.work_cleric": "Cleric workz", + "subtitles.entity.villager.work_farmer": "Farmer workz", + "subtitles.entity.villager.work_fisherman": "Fisherman workz", + "subtitles.entity.villager.work_fletcher": "Fletcher workz", + "subtitles.entity.villager.work_leatherworker": "Leatherworker workss", + "subtitles.entity.villager.work_librarian": "Librarian workss", + "subtitles.entity.villager.work_mason": "Masun workss", + "subtitles.entity.villager.work_shepherd": "Sheephird workss", + "subtitles.entity.villager.work_toolsmith": "Toolsmif workss", + "subtitles.entity.villager.work_weaponsmith": "Weeponsmith workss", + "subtitles.entity.villager.yes": "Vilaagur nods", + "subtitles.entity.vindicator.ambient": "Bad Guy mumblz", + "subtitles.entity.vindicator.celebrate": "Bad Guy cheerz", + "subtitles.entity.vindicator.death": "Bad Guy gets rekt", + "subtitles.entity.vindicator.hurt": "Bad Guy hurz", + "subtitles.entity.wandering_trader.ambient": "Wubterng Truder mumblz", + "subtitles.entity.wandering_trader.death": "Wubterng Truder ded", + "subtitles.entity.wandering_trader.disappeared": "wubterng truder disapers", + "subtitles.entity.wandering_trader.drink_milk": "Wander tredr drinkin mylk", + "subtitles.entity.wandering_trader.drink_potion": "wubterng troder sip magik", + "subtitles.entity.wandering_trader.hurt": "Wubterng Truder hurz", + "subtitles.entity.wandering_trader.no": "Wubterng Truder nays", + "subtitles.entity.wandering_trader.reappeared": "Strnga troder apers", + "subtitles.entity.wandering_trader.trade": "Wubterng Truder tradez", + "subtitles.entity.wandering_trader.yes": "Wubterng Truder nods", + "subtitles.entity.warden.agitated": "Wwrdwn grwwns wngrwly", + "subtitles.entity.warden.ambient": "Blu shrek iz sad :(", + "subtitles.entity.warden.angry": "Blu shrek whant too kilz u", + "subtitles.entity.warden.attack_impact": "Blu shrek wont sumfin ded ;(", + "subtitles.entity.warden.death": "Blu shrek iz ded :)", + "subtitles.entity.warden.dig": "Blu shrek meakz a hol", + "subtitles.entity.warden.emerge": "Blu shrek tryngz 2 be a tree", + "subtitles.entity.warden.heartbeat": "Blu shrek demon-strat it iz alive", + "subtitles.entity.warden.hurt": "Blu shrek hurz", + "subtitles.entity.warden.listening": "Blu shrek filz sumtin", + "subtitles.entity.warden.listening_angry": "Blu shrek filz sumtin (and gos MAD!!!!!!111)", + "subtitles.entity.warden.nearby_close": "Blu shrek iz near u <:(", + "subtitles.entity.warden.nearby_closer": "Blu shrek maks addvancis", + "subtitles.entity.warden.nearby_closest": "Blu shrek iz mooving-", + "subtitles.entity.warden.roar": "Blu shrek fink iz big lowd fur kat", + "subtitles.entity.warden.sniff": "Blu shrek sniiiiiiiiiiiiiiiffz", + "subtitles.entity.warden.sonic_boom": "Kamehameha!", + "subtitles.entity.warden.sonic_charge": "Blu shrek iz keepin energy", + "subtitles.entity.warden.step": "Blu shrek tryngz 2 be Slender", + "subtitles.entity.warden.tendril_clicks": "wardufn tenzyl clik", + "subtitles.entity.witch.ambient": "Crazy Kitteh Ownr giglz", + "subtitles.entity.witch.celebrate": "Crazy Kitteh Ownr cheerz", + "subtitles.entity.witch.death": "Crazy Kitteh Ownr ded", + "subtitles.entity.witch.drink": "Crazy Kitteh Ownr drinkz", + "subtitles.entity.witch.hurt": "Crazy Kitteh Ownr hurz", + "subtitles.entity.witch.throw": "Crazy Kitteh Ownr drowz", + "subtitles.entity.wither.ambient": "Wither angrz", + "subtitles.entity.wither.death": "Wither ded", + "subtitles.entity.wither.hurt": "Wither hurz", + "subtitles.entity.wither.shoot": "Wither atakz", + "subtitles.entity.wither.spawn": "Wither relizd", + "subtitles.entity.wither_skeleton.ambient": "Spooke Wither Skeletun is spooooooky", + "subtitles.entity.wither_skeleton.death": "Spooke Wither Skeletun ded", + "subtitles.entity.wither_skeleton.hurt": "Spooke Wither Skeletun hurz", + "subtitles.entity.wolf.ambient": "Woof Woof panz", + "subtitles.entity.wolf.death": "Woof Woof ded", + "subtitles.entity.wolf.growl": "Woof Woof gwaulz", + "subtitles.entity.wolf.hurt": "Woof Woof hurz", + "subtitles.entity.wolf.shake": "Woof Woof shakez", + "subtitles.entity.zoglin.ambient": "Zoglin grrr", + "subtitles.entity.zoglin.angry": "Zoglin grrrrrr", + "subtitles.entity.zoglin.attack": "Zoglin scartchs", + "subtitles.entity.zoglin.death": "Zoglin nov ded", + "subtitles.entity.zoglin.hurt": "Zoglin ouchs", + "subtitles.entity.zoglin.step": "Zoglin wlkz", + "subtitles.entity.zombie.ambient": "Bad Hooman groonz", + "subtitles.entity.zombie.attack_wooden_door": "Kitteh dor iz attac!", + "subtitles.entity.zombie.break_wooden_door": "Kitteh dor iz breks!", + "subtitles.entity.zombie.converted_to_drowned": "Ded guy evolvez into de watuur tingy", + "subtitles.entity.zombie.death": "Bad Hooman ded", + "subtitles.entity.zombie.destroy_egg": "Tortl ec stumpt", + "subtitles.entity.zombie.hurt": "Bad Hooman hurz", + "subtitles.entity.zombie.infect": "Slow baddie infectz", + "subtitles.entity.zombie_horse.ambient": "Zombee hoers criez", + "subtitles.entity.zombie_horse.death": "Zombee hoers ded", + "subtitles.entity.zombie_horse.hurt": "Zombee hoers hurz", + "subtitles.entity.zombie_villager.ambient": "Unded Villaguur groonz", + "subtitles.entity.zombie_villager.converted": "Unded Villager Cryz", + "subtitles.entity.zombie_villager.cure": "Undead villager Sniffz", + "subtitles.entity.zombie_villager.death": "Unded Villaguur gets rekt", + "subtitles.entity.zombie_villager.hurt": "Unded Villaguur hurz", + "subtitles.entity.zombified_piglin.ambient": "Zombefyed Piglin grontz", + "subtitles.entity.zombified_piglin.angry": "Zombefyed Piglin grontz grrrr", + "subtitles.entity.zombified_piglin.death": "Zonbifid Piglin dyez", + "subtitles.entity.zombified_piglin.hurt": "Zumbefid Piglin hrtz", + "subtitles.event.raid.horn": "Ominous horn blares", + "subtitles.item.armor.equip": "girrs eqip", + "subtitles.item.armor.equip_chain": "jingly katsuit jinglez", + "subtitles.item.armor.equip_diamond": "shiny katsuit pings", + "subtitles.item.armor.equip_elytra": "FLYY tiny doin noiz", + "subtitles.item.armor.equip_gold": "shiny katsuit chinks", + "subtitles.item.armor.equip_iron": "cheap katsuit bangs", + "subtitles.item.armor.equip_leather": "katsuit ruztlez", + "subtitles.item.armor.equip_netherite": "Netherite armur meows", + "subtitles.item.armor.equip_turtle": "TortL Shell funks", + "subtitles.item.axe.scrape": "Akss scratchez", + "subtitles.item.axe.strip": "Akss streepz", + "subtitles.item.axe.wax_off": "Wakz off", + "subtitles.item.bone_meal.use": "Smashed Skeletun go prrrrr", + "subtitles.item.book.page_turn": "Paeg rustlez", + "subtitles.item.book.put": "Book thump", + "subtitles.item.bottle.empty": "no moar sippy", + "subtitles.item.bottle.fill": "Buttl filz", + "subtitles.item.bucket.empty": "Buket empteiz", + "subtitles.item.bucket.fill": "Buket filz", + "subtitles.item.bucket.fill_axolotl": "KUTE PINK FISHH pickd up", + "subtitles.item.bucket.fill_fish": "fishi got", + "subtitles.item.bucket.fill_tadpole": "Kut smol toad capturez", + "subtitles.item.bundle.drop_contents": "Budnl emptied naww catrzzz", + "subtitles.item.bundle.insert": "Itaem packd", + "subtitles.item.bundle.remove_one": "Itaem unpackd", + "subtitles.item.chorus_fruit.teleport": "Cat wrapz", + "subtitles.item.crop.plant": "Crop plantd", + "subtitles.item.crossbow.charge": "Crosbowz is getting redy", + "subtitles.item.crossbow.hit": "Errow hits", + "subtitles.item.crossbow.load": "Crosbowz be loadin'", + "subtitles.item.crossbow.shoot": "Crosbowz is firin'", + "subtitles.item.dye.use": "Colurer thing staanz", + "subtitles.item.firecharge.use": "Fierbal wushez", + "subtitles.item.flintandsteel.use": "Frint und steal clic", + "subtitles.item.glow_ink_sac.use": "Shiny ink sac does sploosh", + "subtitles.item.goat_horn.play": "monten shep's shap thingy becom catbox", + "subtitles.item.hoe.till": "Hoe tilz", + "subtitles.item.honey_bottle.drink": "kitteh stuffd", + "subtitles.item.honeycomb.wax_on": "Wakz on", + "subtitles.item.ink_sac.use": "Writy likwid does sploosh", + "subtitles.item.lodestone_compass.lock": "loserstone spinny thing lockd onto loserstone", + "subtitles.item.nether_wart.plant": "Crop plantd", + "subtitles.item.shears.shear": "shers clic", + "subtitles.item.shield.block": "sheild blocz", + "subtitles.item.shovel.flatten": "Shuvl flatnz", + "subtitles.item.spyglass.stop_using": "i cnt c u anymoar", + "subtitles.item.spyglass.use": "Now i can c u", + "subtitles.item.totem.use": "Totuem iz revivin u", + "subtitles.item.trident.hit": "Dinglehopper zticks", + "subtitles.item.trident.hit_ground": "Dinglehopper goez brr brr", + "subtitles.item.trident.return": "Dinglehopper come back to kitteh", + "subtitles.item.trident.riptide": "Dinglehopper zmmz", + "subtitles.item.trident.throw": "Dinglehopper clengz", + "subtitles.item.trident.thunder": "Dinglehopper thundr crackz", + "subtitles.particle.soul_escape": "cya sol", + "subtitles.ui.cartography_table.take_result": "Direcshun papeh drohn", + "subtitles.ui.loom.take_result": "Looom iz looomin", + "subtitles.ui.stonecutter.take_result": "Stun chopprs uzed", + "subtitles.weather.rain": "Rein fallz", + "team.collision.always": "4 evr", + "team.collision.never": "Nevr", + "team.collision.pushOtherTeams": "Push othr kities", + "team.collision.pushOwnTeam": "Push own kities", + "team.notFound": "Cat doezn't know da team '%s'", + "team.visibility.always": "4 evr", + "team.visibility.hideForOtherTeams": "Hid for othr kitty", + "team.visibility.hideForOwnTeam": "Hid for herd", + "team.visibility.never": "Nevr", + "title.32bit.deprecation": "BEEP BOOP 32-bit sistem detekted: dis mai prvent ya form playin in da future cuz 64-bit sistem will be REQUIRED!!", + "title.32bit.deprecation.realms": "Minecraft'll soon need da 64-bit sistem wich will prevnt ya from playin or usin Realms on dis devic. Yall need two manualy kancel any Realms subskripshin.", + "title.32bit.deprecation.realms.check": "Do not shw dis scren agin >:(", + "title.32bit.deprecation.realms.header": "32-bit sistm detektd", + "title.multiplayer.disabled": "Utur kittehz is dizabl, pwease chek ur Mekrosoft akowant setinz.", + "title.multiplayer.disabled.banned.permanent": "Ur akownt iz permanently suspended drum online pulay", + "title.multiplayer.disabled.banned.temporary": "Ur akownt iz temporarily suspended from online pulay", + "title.multiplayer.lan": "Multiplayr (LAL)", + "title.multiplayer.other": "NAT LONELEY (3rd-kitteh servurr)", + "title.multiplayer.realms": "Multiplayr (Reelms) k?", + "title.singleplayer": "Loneleh kitteh", + "translation.test.args": "%s %s", + "translation.test.complex": "Prefix, %s%2$s again %s and %1$s lastly %s and also %1$s again!", + "translation.test.escape": "%%s %%%s %%%%s %%%%%s", + "translation.test.invalid": "hi %", + "translation.test.invalid2": "hi %s", + "translation.test.none": "Hi, wurld!", + "translation.test.world": "world", + "tutorial.bundleInsert.description": "Rite clck t0 add itamz", + "tutorial.bundleInsert.title": "Use cat powch", + "tutorial.craft_planks.description": "The recipe buk thingy can halp", + "tutorial.craft_planks.title": "Mak wuddn plankz", + "tutorial.find_tree.description": "Beet it up 2 collecz w00d", + "tutorial.find_tree.title": "Find 1 scratchr", + "tutorial.look.description": "Uss ur rat 2 see da w0rld", + "tutorial.look.title": "See da wor1d", + "tutorial.move.description": "Jump wit %s", + "tutorial.move.title": "Expl0r wid %s, %s, %s, & %s", + "tutorial.open_inventory.description": "Prez %s", + "tutorial.open_inventory.title": "Opn ur stuffz containr", + "tutorial.punch_tree.description": "Prez %s @ lengthz", + "tutorial.punch_tree.title": "Demolish ur scratcher lul", + "tutorial.socialInteractions.description": "Pres %s 2 opun", + "tutorial.socialInteractions.title": "Soshul interacshuns" +} \ No newline at end of file diff --git a/modules/chat.js b/modules/chat.js new file mode 100644 index 0000000..3ae63b2 --- /dev/null +++ b/modules/chat.js @@ -0,0 +1,125 @@ +const loadPrismarineChat = require('prismarine-chat') +const kaboomChatParser = require('../chat/kaboom') +const chipmunkmodChatParser = require('../chat/chipmunkmod') +const chipmunkmodblackilykatverChatParser = require('../chat/chipmunkmodBlackilyKatVer') +const lang = require('../lolus.json') + +function tryParse (json) { + try { + return JSON.parse(json) + } catch (error) { + return { text: '' } + } +} +//what was changed?? +function inject (bot) { + let ChatMessage + bot.on('registry_ready', registry => { + ChatMessage = loadPrismarineChat(registry) + }) + + bot.chatParsers = [kaboomChatParser, chipmunkmodChatParser, chipmunkmodblackilykatverChatParser] + + bot.on('packet.profileless_chat', packet => { + const message = tryParse(packet.message) + const sender = tryParse(packet.name) + + bot.emit('profileless_chat', { + message, + type: packet.type, + sender + }) + + bot.emit('message', message) + + tryParsingMessage(message, { senderName: sender, players: bot.players, getMessageAsPrismarine: bot.getMessageAsPrismarine }) + }) +//chat.type.text +//chat.type.announcement +//chat.type.emote + //packet.chatType_ + bot.on('packet.player_chat', packet => { + const unsigned = tryParse(packet.unsignedChatContent) + + bot.emit('player_chat', { plain: packet.plainMessage, unsigned, senderUuid: packet.senderUuid}) + + bot.emit('message', unsigned) + + tryParsingMessage(unsigned, { senderUuid: packet.senderUuid, players: bot.players, getMessageAsPrismarine: bot.getMessageAsPrismarine}) + + }) + + bot.on('packet.system_chat', packet => { + const message = tryParse(packet.content) + + if (message.translate === 'advMode.setCommand.success') return // Ignores command set messages + + bot.emit('system_chat', { message, actionbar: packet.isActionBar }) + + if (packet.isActionBar) { + return + } + + bot.emit('message', message) + + tryParsingMessage(message, { players: bot.players, getMessageAsPrismarine: bot.getMessageAsPrismarine }) + }) + + function tryParsingMessage (message, data) { + let parsed + for (const parser of bot.chatParsers) { + parsed = parser(message, data) + if (parsed) break + } + + if (!parsed) return + bot.emit('parsed_message', parsed) + } + + bot.getMessageAsPrismarine = message => { + try { + if (ChatMessage !== undefined) { + return new ChatMessage(message) + } + } catch {} + + return undefined + } + + bot.chat = message => { + const acc = 0 + const bitset = Buffer.allocUnsafe(3) + + bitset[0] = acc & 0xFF + bitset[1] = (acc >> 8) & 0xFF + bitset[2] = (acc >> 16) & 0xFF + + bot._client.write('chat_message', { + message, + timestamp: BigInt(Date.now()), + salt: 0n, + offset: 0, + acknowledged: bitset + + }) + + } + + + bot.command = command => { + bot._client.write('chat_command', { + command, + timestamp: BigInt(Date.now()), + salt: 0n, + argumentSignatures: [], + signedPreview: false, + messageCount: 0, + acknowledged: Buffer.alloc(3), + previousMessages: [] + }) + } + + bot.tellraw = (message, selector = '@a') => bot.core.run('minecraft:tellraw @a ' + JSON.stringify(message)) // ? Should this be here? +} + +module.exports = inject diff --git a/modules/chat_command_handler.js b/modules/chat_command_handler.js new file mode 100644 index 0000000..55b59c6 --- /dev/null +++ b/modules/chat_command_handler.js @@ -0,0 +1,35 @@ +const CommandSource = require('../CommandModules/command_source') +const CommandError = require('../CommandModules/command_error') + +function inject (bot) { + bot.on('parsed_message', data => { + if (data.type !== 'minecraft:chat') return + + const plainMessage = bot.getMessageAsPrismarine(data.contents)?.toString() + if (!plainMessage.startsWith(bot.commandManager.prefix)) return + const command = plainMessage.substring(bot.commandManager.prefix.length) + + const source = new CommandSource(data.sender, { discord: false, console: false }, true) + source.sendFeedback = message => { + const prefix = { + translate: '[%s%s%s] \u203a ', + bold: false, + color: 'white', + with: [ + { color: 'dark_purple', text: 'FNF', bold:true }, + { color: 'aqua', text: 'Boyfriend', bold:true }, + { color: 'dark_red', text: 'Bot', bold:true}, + + { color: 'green', text: command.split(' ')[0] } + ] + } + + bot.tellraw(['', prefix, message]) + } + + bot.commandManager.executeString(source, command) + + }) +} + +module.exports = inject \ No newline at end of file diff --git a/modules/command_core.js b/modules/command_core.js new file mode 100644 index 0000000..1e19125 --- /dev/null +++ b/modules/command_core.js @@ -0,0 +1,75 @@ +function inject (bot, options) { + bot.core = { + // what you think im doing? look at line 17 + area: { + start: options.core?.area.start ?? { x: 0, y: 0, z: 0 }, + end: options.core?.area.end ?? { x: 15, y: 0, z: 15 } + }, + position: null, + currentBlockRelative: { x: 0, y: 0, z: 0 }, + + refill () { + const pos = bot.core.position + const { start, end } = bot.core.area + + if (!pos) return + + bot.command(`fill ${pos.x + start.x} ${pos.y + start.y} ${pos.z + start.z} ${pos.x + end.x} ${pos.y + end.y} ${pos.z + end.z} repeating_command_block{CustomName: '{"text":"${bot.options.Core.customName}","color":"dark_red","clickEvent":{"action":"open_url","value":"${bot.options.Core.customName}"}}'} destroy`) + }, + + move (pos = bot.position) { + bot.core.position = { + x: Math.floor(pos.x / 16) * 16, + y: 0, + z: Math.floor(pos.z / 16) * 16 + } + bot.core.refill() + }, + + currentBlock () { + const relativePosition = bot.core.currentBlockRelative + const corePosition = bot.core.position + if (!corePosition) return null + return { x: relativePosition.x + corePosition.x, y: relativePosition.y + corePosition.y, z: relativePosition.z + corePosition.z } + }, + + incrementCurrentBlock () { + const relativePosition = bot.core.currentBlockRelative + const { start, end } = bot.core.area + + relativePosition.x++ + + if (relativePosition.x > end.x) { + relativePosition.x = start.x + relativePosition.z++ + } + + if (relativePosition.z > end.z) { + relativePosition.z = start.z + relativePosition.y++ + } + + if (relativePosition.y > end.y) { + relativePosition.x = start.x + relativePosition.y = start.y + relativePosition.z = start.z + } + }, + + run (command) { + const location = bot.core.currentBlock() + if (!location) return + + bot._client.write('update_command_block', { command, location, mode: 1, flags: 0b100 }) + + bot.core.incrementCurrentBlock() + } + } + + bot.on('move', () => { + bot.core.move(bot.position) + // setTimeout(() => bot.core.run('say Hello, world!'), 1000) + }) +} + +module.exports = inject diff --git a/modules/command_loop_manager.js b/modules/command_loop_manager.js new file mode 100644 index 0000000..a102da1 --- /dev/null +++ b/modules/command_loop_manager.js @@ -0,0 +1,21 @@ +function inject (bot, options) { + bot.cloop = { + list: [], + + add (command, interval) { + this.list.push({ timer: setInterval(() => bot.core.run(command), interval), command, interval }) + }, + + remove (index) { + clearInterval(this.list[index].timer) + }, + + clear () { + for (const cloop of this.list) clearInterval(cloop.timer) + + this.list = [] + } + } +} + +module.exports = inject diff --git a/modules/command_manager.js b/modules/command_manager.js new file mode 100644 index 0000000..f1e1646 --- /dev/null +++ b/modules/command_manager.js @@ -0,0 +1,92 @@ +const fs = require('fs') +const path = require('path') +const CommandError = require('../CommandModules/command_error.js') + +function inject (bot, options) { + bot.commandManager = { + prefix: options.commands?.prefix ?? 'default', + commands: {}, + amogus: [], +//ohio + execute (source, commandName, args) { + const command = this.getCommand(commandName.toLowerCase()) +//Unknown command. Type "/help" for help + try { + if (!command || !command.execute) throw new CommandError({ translate: 'Unknown command %s. Type "~help" for help', with: [commandName]}) +//command.unknown.argument command.unknown.command + //command.context.here + let hash = 1 + let owner = 2 + if (command.consoleOnly && !source.sources.console) throw new CommandError({ translate: 'This command can only be executed via console', color: 'dark_red' }) + if (command.hash && args.length === 0 && source.hash) throw new CommandError({ translate: 'Please provide a hash', color: 'red' }) + if (command.owner && args.length === 0 && source.owner) throw new CommandError({ translate: 'Please provide a OwnerHash', color: 'dark_red' }) + if (command.hashOnly && source.hash) { + // debug + // console.log(`${args} args0 ${args[0]}`) //too sus + const hash = `${args[0]}` // this is undefined + console.log(hash) // input hash + console.log(bot.hash) // actual hash +//but look in hashing.js + if (hash !== bot.hash) throw new CommandError({ translate: 'Invalid hash', color: 'dark_red' }) // so true +//im guessing its smh in hashing.js + bot.updatehash + } else if (command.hashOnly && source.sources.discord) { + const event = source.discordMessageEvent + + const roles = event.member?.roles?.cache +//1106399617635061810 + const hasRole = roles.some(role => role.name === '1106399617635061810') + + if (!hasRole) throw new CommandError({ translate: 'You are not trusted!' }) + } + /* + for (const filename of fs.readdirSync(path.join(__dirname, '../commands'))) { + try { + const command = require(path.join(__dirname, '../commands', filename)) + bot.commandManager.register(command) + } catch (error) { + console.error('Failed to load command', filename, ':', error) + } + */ + return command.execute({ bot, source, arguments: args }) + } catch (error) { + console.error(error)//const filename of fs.readdirSync(path.join(__dirname, '../commands' +//console.error('Failed to load command', filename, ':', error) + +if (error instanceof CommandError) source.sendError(error._message) + + else source.sendError({ translate: 'command.failed', hoverEvent: { action: 'show_text', contents: String(error.stack) } }) + } + }, +// + executeString (source, command) { + const [commandName, ...args] = command.split(' ') + return this.execute(source, commandName, args) + }, + + register (command) { + this.commands[command.name] = command + }, + + getCommand (name) { + return this.commands[name] + }, + + getCommands () { + return Object.values(this.commands) + } + } +// +amogus = [] +for (const filename of fs.readdirSync(path.join(__dirname, '../commands'))) { + try { + const command = require(path.join(__dirname, '../commands', filename)) + bot.commandManager.register(command) + bot.commandManager.amogus.push(command) + } catch (error) { + console.error('Failed to load command', filename, ':', error) + } + +} +} +module.exports = inject diff --git a/modules/console.js b/modules/console.js new file mode 100644 index 0000000..c629910 --- /dev/null +++ b/modules/console.js @@ -0,0 +1,53 @@ +const CommandSource = require('../CommandModules/command_source') +//const log = require('../logger') + +function inject (bot, options) { + + bot.console = { + readline: null, + + consoleServer: 'all', + + useReadlineInterface (rl) { + this.readline = rl + + rl.on('line', line => { + if (bot.options.host !== this.consoleServer && this.consoleServer !== 'all') return + + bot.commandManager.executeString(bot.console.source, line) + }) + + rl.on('close', () => { + this.readline = null + }) + + + const originalConsole = console + this.log = (...args) => { + rl.output.write('\x1b[2K\r') + originalConsole.log(args.toString()) + rl._refreshLine() + } + } + } + + bot.console.source = new CommandSource(null, { console: true, discord: false }); + bot.console.source.sendFeedback = message => { + const lang = require('../lolus.json') + const ansi = bot.getMessageAsPrismarine(message)?.toAnsi(lang) + bot.console.log(ansi) + } + bot.on('message', message => { + const lang = require('../lolus.json')//idk Parker I can help + const ansi = bot.getMessageAsPrismarine(message)?.toAnsi(lang) + const string = bot.getMessageAsPrismarine(message)?.toString() + + const now = new Date().toLocaleString("en-US",{timeZone:"America/CHICAGO"}) + //new Date().toLocaleString("en-US",{timeZone:"America/LOS_ANGELES"}) + bot.console.log(`[${now}] [${options.host}:${options.port}] ${ansi}`) +//`[${now}] [${options.host}${options.port !== 25565 ? `:${options.port}` : ''}] ${ansi}` + + // log(`[${now}] [${options.host}:${options.port}] ${string}`, true, false) + }) +} +module.exports = inject diff --git a/modules/discord.js b/modules/discord.js new file mode 100644 index 0000000..7e07829 --- /dev/null +++ b/modules/discord.js @@ -0,0 +1,202 @@ +// TODO: Maybe move client creation elsewhere +const { escapeMarkdown } = require('../util/escapeMarkdown') +const { Client, GatewayIntentBits } = require('discord.js') +const { MessageContent, GuildMessages, Guilds } = GatewayIntentBits + +const CommandSource = require('../CommandModules/command_source') + +const client = new Client({ intents: [Guilds, GuildMessages, MessageContent] }) +const util = require('util') +client.login(process.env.discordtoken) + +function inject (bot, options) { + if (!options.discord?.channelId) { + bot.discord = { invite: options.discord?.invite } + return + } + + bot.discord = { + client, + channel: undefined, + invite: options.discord.invite || undefined, + commandPrefix: options.discord.commandPrefix + } + + client.on('ready', () => { + bot.discord.channel = client.channels.cache.get(options.discord.channelId) + + }) + + // I feel like this is a modified version of ChomeNS Bot's discord plugin (the js one ofc) lol - chayapak + + let discordQueue = '' // too lazy to make an array mabe + setInterval(async () => { + if (discordQueue === '') return + try { + await bot.discord.channel.send(discordQueue.substring(0, 2000)) + } catch (error) { + console.error(error) + } + //sus + discordQueue = '' + }, 1000) +//const ansi = bot.getMessageAsPrismarine(message).toAnsi(lang).replaceAll('``\`\`\u200b\ansi\n\`\`\u001b[9', '\u001b[3\n`\`\`') + /* bot.on('message', (message) => { + const cleanMessage = escapeMarkdown(message.toAnsi(), true) + const discordMsg = cleanMessage + .replaceAll('@', '@\u200b') + .replaceAll('http', 'http\u200b') + .replaceAll('\u001b[9', '\u001b[3') + + queue += '\n' + discordMsg + }) + */ + + function sendDiscordMessage (message) { + discordQueue += message + '\n' + } + + /* + const cleanMessage = escapeMarkdown(message.toAnsi(), true) + const discordMsg = cleanMessage + .replaceAll('@', '@\u200b') + .replaceAll('http', 'http\u200b') + .replaceAll('\u001b[9', '\u001b[3') + */ + function sendComponent (message) { + const lang = require('../lolus.json') + const ansi = bot.getMessageAsPrismarine(message).toAnsi().replaceAll('```\u001b[9```' + '```\u001b[3```') // I have a function to fix ansi :shrug: + + /* + would it be better to do + ``` + message1 + message2 + message3... + ``` + and not + ``` + message1 + ``` + ```` + message2 + ```` + ```` + message3... + ``` + */ + + + const now = new Date().toLocaleString("en-US",{timeZone:"America/CHICAGO"}) + try { + sendDiscordMessage('```ansi\n' + fixansi(ansi.replaceAll('\u200b`').substring(0, 1983)) + '\n```') + + } catch (e) { + //i was gonna try to get it to debug via console + console.error(`Error sending a message to Discord:\n${e.message}`) +//already tried ansi + }//send isnt defined + } // its still doing the ansi crap + //;/ +//wait a min it shows smh about unable to read properties of undefined (reading 'send') in the console or smh on startup +// its the messages it sending read lines 69 to 86 + // i see + bot.on('message', message => { + sendComponent(message) + }) + + function messageCreate (message) { + if (message.author.id === bot.discord.client.user.id) return + + if (message.channel.id !== bot.discord.channel.id) return + + if (message.content.startsWith(bot.discord.commandPrefix)) { // TODO: Don't hardcode this + const source = new CommandSource({ profile: { name: message.member.displayName } }, { discord: true, console: false }, false, message) + source.sendFeedback = message => { + sendComponent(message) + } + + bot.commandManager.executeString(source, message.content.substring(bot.discord.commandPrefix.length)) + return + } + + bot.tellraw({ + translate: '[%s] %s \u203a %s', + with: [ + { + translate: '%s%s%s %s', + bold:false, + with: [ + { + text: 'FNF', + bold: false, + color: 'dark_purple' + }, + { + text: 'Boyfriend', + bold: false, + color: 'aqua' + }, + { + text: 'Bot', + bold: false, + color: 'dark_red' + }, + + { + text: 'Discord', + bold: false, + color: 'blue' + } + ], + clickEvent: bot.discord.invite ? { action: 'open_url', value: bot.discord.invite } : undefined, + hoverEvent: { action: 'show_text', contents: 'Click to join the discord' } + }, + { text: message.member.displayName }, + message.content + ] + }) + } + client.on('messageCreate', messageCreate) +bot.on('error', (error) => { + console.log(error.stack) + sendDiscordMessage(`\`\`\`ansi\nDisconnected: ${util.inspect(error.stack)}\n\`\`\``) + + }) + + +} + /* bot.console.info( + `Disconnected from ${bot.server.host} (${event} event): ${util.inspect(reason)}` + ) + channel.send(`Disconnected: \`${util.inspect(reason)}\``) +*/ +function fixansi(message) { + const ansilist = { + "\x1B\[93m": "\x1B[33m", // Yellow + "\x1B\[96m": "\x1B[36m", // Blue + "\x1B\[94m": "\x1B[34m", // Discord Blue + "\x1B\[90m": "\x1B[30m", // Gray + "\x1B\[91m": "\x1B[31m", // Light Red + "\x1B\[95m": "\x1B\[35m", // Pink + "\x1B\[92m": "\x1B\[32m", // Green + "\x1B\[0m": "\x1B\[0m\x1B\[37m", // White + "\x1B\[97m": "\x1B\[0m\x1B\[37m", // White + }; + let i = message; + + for (const ansi in ansilist) { + if (ansilist.hasOwnProperty(ansi)) { + i = i.replace(new RegExp(escapeRegExpChars(ansi), 'g'), ansilist[ansi]); + + function escapeRegExpChars(text) { + return text.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + } + } + + return i; +} + +// +module.exports = inject diff --git a/modules/hashing.js b/modules/hashing.js new file mode 100644 index 0000000..3ab2fe7 --- /dev/null +++ b/modules/hashing.js @@ -0,0 +1,30 @@ +// * Not real hashing +const crypto = require('crypto') +const ownerkey = process.env['FNFBoyfriendBot_Owner_key'] +const key = process.env['FNFBoyfriendBot_key'] +function inject (bot) { + bot.hash = '' + bot.ownerhash = '' + bot.updatehashes = update + let hash + let owner + const interval = setInterval(() => { + hash = crypto.createHash('sha256').update(Math.floor(Date.now() / 10000) + key).digest('hex').substring(0, 16) + owner = crypto.createHash('sha256').update(Math.floor(Date.now() / 10000) + ownerkey).digest('hex').substring(0, 16) + bot.hash = hash + bot.ownerhash = owner + }, 2000) + function update() { + hash = crypto.createHash('sha256').update(Math.floor(Date.now() / 10000) + key).digest('hex').substring(0, 16) + owner = crypto.createHash('sha256').update(Math.floor(Date.now() / 10000) + ownerkey).digest('hex').substring(0, 16) + bot.hash = hash + bot.ownerhash = owner + } + //this should work right? + + // ok + bot.on('end', () => { + clearInterval(interval) + }) + } +module.exports = inject \ No newline at end of file diff --git a/modules/player_list.js b/modules/player_list.js new file mode 100644 index 0000000..9aef729 --- /dev/null +++ b/modules/player_list.js @@ -0,0 +1,89 @@ +function inject (bot) { + bot.players = [] +//chayapak you mentally ok? + bot.on('packet.player_info', packet => { + const actions = [] + + if (packet.action & 0b000001) actions.push(addPlayer) + if (packet.action & 0b000010) actions.push(initializeChat) + if (packet.action & 0b000100) actions.push(updateGamemode) + if (packet.action & 0b001000) actions.push(updateListed) + if (packet.action & 0b010000) actions.push(updateLatency) + if (packet.action & 0b100000) actions.push(updateDisplayName) + + for (const entry of packet.data) { + for (const action of actions) { + action(entry) + } + } + }) + + /*bot.on('packet.player_remove', ({ players }) => { + for (const player of players) { + bot.players = bot.players.filter(entry => entry.uuid !== player) + + } + }) + */ + + function addPlayer (entry) { + bot.players = bot.players.filter(_entry => _entry.uuid !== entry.uuid) + bot.players.push({ + uuid: entry.uuid, + profile: { name: entry.player.name, properties: entry.player.properties }, + + chatSession: undefined, + gamemode: undefined, + listed: undefined, + latency: undefined, + displayName: undefined + }) + } + + function initializeChat (entry) { + // TODO: Handle chat sessions + } + + function updateGamemode (entry) { + const target = bot.players.find(_entry => _entry.uuid === entry.uuid) + if (!target) return + + target.gamemode = entry.gamemode + } + + function updateListed (entry) { + const target = bot.players.find(_entry => _entry.uuid === entry.uuid) + if (!target) return + + target.listed = entry.listed + } + + function updateLatency (entry) { + const target = bot.players.find(_entry => _entry.uuid === entry.uuid) + if (!target) return + + target.latency = entry.latency + } + + function updateDisplayName (entry) { + const target = bot.players.find(_entry => _entry.uuid === entry.uuid) + if (!target) return + + try { + target.displayName = JSON.parse(entry.displayName) + } catch { + // do nothing + } + } + + bot.on('end', () => (bot.players = [])) +} + +module.exports = inject +/*function addPlayer (player, packet) { + if (bot.players.getPlayer(player)) bot.emit('player_unvanished', player, packet) + else bot.emit('player_added', player, packet) + + bot.players.addPlayer(player) + } + */ \ No newline at end of file diff --git a/modules/position.js b/modules/position.js new file mode 100644 index 0000000..aaf943c --- /dev/null +++ b/modules/position.js @@ -0,0 +1,19 @@ +function inject (bot) { + bot.position = null + + bot.on('packet.position', packet => { + bot.position = { + x: packet.flags & 1 ? (this.x + packet.x) : packet.x, + y: packet.flags & 2 ? (this.y + packet.y) : packet.y, + z: packet.flags & 4 ? (this.z + packet.z) : packet.z + } + + bot._client.write('teleport_confirm', { teleportId: packet.teleportId }) + + bot.emit('move') + }) + + bot.on('end', () => { bot.position = null }) +} + +module.exports = inject diff --git a/modules/reconnect.js b/modules/reconnect.js new file mode 100644 index 0000000..c3139f8 --- /dev/null +++ b/modules/reconnect.js @@ -0,0 +1,16 @@ +const mc = require('minecraft-protocol') + +function reconnect (bot, options) { + bot.reconnectDelay = options.reconnectDelay ?? 5200 // Set from 1000 to 5200 - yfd + + bot.on('end', () => { + if (bot.reconnectDelay < 0) return + + setTimeout(() => { + bot._client = mc.createClient(options) + bot.emit('init_client', bot._client) + }, bot.reconnectDelay) + }) +} + +module.exports = reconnect \ No newline at end of file diff --git a/modules/registry.js b/modules/registry.js new file mode 100644 index 0000000..17c9de4 --- /dev/null +++ b/modules/registry.js @@ -0,0 +1,11 @@ +const createRegistry = require('prismarine-registry') + +function inject (bot) { + bot.on('packet.login', packet => { + bot.registry = createRegistry(bot._client.version) + bot.registry.loadDimensionCodec(packet.dimensionCodec) + bot.emit('registry_ready', bot.registry) + }) +} + +module.exports = inject diff --git a/modules/selfcare.js b/modules/selfcare.js new file mode 100644 index 0000000..c87c4a9 --- /dev/null +++ b/modules/selfcare.js @@ -0,0 +1,97 @@ + +const util = require('util') + +const COMMANDSPY_ENABLED_MESSAGE = { text: 'Successfully enabled CommandSpy' } +const COMMANDSPY_DISABLED_MESSAGE = { text: 'Successfully disabled CommandSpy' } +//You now have the tag: &8[&bPrefix &4d~&8] +function inject (bot) { + let entityId + let gameMode + let permissionLevel = 2 +let muted = false + let commandSpyEnabled = false + let vanished = false + let prefix = false + let skin = false +/* if (data.toString().startsWith('You have been muted')) muted = true + if (data.toString() === 'You have been unmuted.') muted = false +*/ + //bot.on('message', (data) => { + bot.on('message', (message, data) => { + // Successfully removed your skin + const stringmessage = bot.getMessageAsPrismarine(message)?.toString() + if (stringmessage.startsWith('You have been muted')) muted = true + else if (stringmessage === "You have been unmuted.") muted = false + else if (util.isDeepStrictEqual(message, COMMANDSPY_ENABLED_MESSAGE)) commandSpyEnabled = true + else if (util.isDeepStrictEqual(message, COMMANDSPY_DISABLED_MESSAGE)) commandSpyEnabled = false + else if (stringmessage === `You now have the tag: &8[&bPrefix &4${bot.options.commands.prefix}&8]`) { + prefix = true + return + } + else if (stringmessage.startsWith("You now have the tag: ") || stringmessage === "You no longer have a tag") prefix = false + else if (stringmessage === `Successfully set your skin to Parker2991's`) { + skin = true + return + } + else if (stringmessage.startsWith("Successfully removed your skin") || stringmessage === "Successfully removed your skin") skin = false + if (message?.text !== '' || !Array.isArray(message.extra) || message.extra.length < 2 || !message.extra[0]?.text?.startsWith('Vanish for') || message.extra[0].color !== 'gold') return + + const suffix = message.extra[message.extra.length - 1] + + if (suffix?.color !== 'gold') return +//data.toString().startsWith + if (suffix.text?.endsWith(': enabled')) vanished = true + else if (suffix.text?.endsWith(': disabled')) vanished = false // Bruh what is this ohio code +// + + + }) + + bot.on('packet.entity_status', packet => { + if (packet.entityId !== entityId || packet.entityStatus < 24 || packet.entityStatus > 28) return + permissionLevel = packet.entityStatus - 24 + })// + //TO-DO create a array for nick, prefix, and mabe username in selfcare so that when it joins or has the nick/prefix changed it will change it back to the set nick and prefix in selfcare + + bot.on('packet.game_state_change', packet => { + if (packet.reason !== 3) return // Reason 3 = Change Game Mode + + gameMode = packet.gameMode + }) + + let timer + bot.on('packet.login', (packet) => { + entityId = packet.entityId + gameMode = packet.gameMode + + timer = setInterval(() => { + if (permissionLevel < 2) bot.command('op @s[type=player]') + else if (!commandSpyEnabled) bot.command('commandspy:commandspy on') + else if (!vanished) bot.command('essentials:vanish enable') + else if (muted) bot.core.run(`essentials:mute ${bot.uuid}`) + else if (!prefix) bot.command(`prefix &8[&bPrefix &4${bot.options.commands.prefix}&8]`) + else if (gameMode !== 1) bot.command('gamemode creative @s[type=player]') + else if (!skin) bot.command('skin Parker2991') + }, 500) + }) + + bot.on('end', () => { + if (timer) clearInterval(timer) + prefix = false + muted = false + commandSpyEnabled = false + vanished = false + skin = false + }) +} + +module.exports = inject +/*const buildstring = process.env['buildstring'] + bot.on('login', async () => { + console.log(`starting ${buildstring}`) +await bot.discord.channel.send(`Starting ${buildstring}`) + await sendChat('/prefix &8[&4Prefix ~ &8]') + await sendChat(buildstring) + await sendChat('Prefix ~') + }) +}*/ \ No newline at end of file diff --git a/modules/startup.js b/modules/startup.js new file mode 100644 index 0000000..322596a --- /dev/null +++ b/modules/startup.js @@ -0,0 +1,14 @@ +function inject (bot, context) { + + const buildstring = process.env['buildstring'] + const util = require('node:util') + const { EventEmitter } = require('events') +console.log(`Starting ${buildstring} .......`) +console.log(`Username: ${bot.options.username}`) +console.log(`Host: ${bot.options.host}:${bot.options.port}`) + console.log(`Minecraft java version: ${bot.options.version}`) + + +} + +module.exports = inject diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..616be3e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7427 @@ +{ + "name": "FNFBoyfriendBot-V40", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@npmcli/arborist": "^7.2.0", + "@npmcli/metavuln-calculator": "^7.0.0", + "@tonejs/midi": "^2.0.28", + "@vitalets/google-translate-api": "^9.2.0", + "axios": "^1.5.1", + "chromium": "^3.0.3", + "color-convert": "^2.0.1", + "cowsay2": "^2.0.4", + "discord.js": "^14.12.1", + "dotenv": "^16.3.1", + "isolated-vm": "^4.6.0", + "minecraft-data": "^3.46.2", + "minecraft-protocol": "^1.44.0", + "minecraft-protocol-forge": "^1.0.0", + "mineflayer": "^4.14.0", + "mineflayer-cmd": "^1.1.3", + "moment-timezone": "^0.5.43", + "node_characterai": "^1.1.3", + "node_characterai_edited": "^1.1.5", + "node-weatherunderground": "^1.2.0", + "openweather-api-node": "^3.1.2", + "prismarine-chat": "^1.9.1", + "prismarine-nbt": "^2.2.1", + "prismarine-registry": "^1.7.0", + "randomstring": "^1.3.0", + "readline": "^1.3.0", + "sharp": "^0.32.6", + "urban-dictionary": "^3.0.2", + "uuid-by-string": "^4.0.0", + "vec3": "^0.1.8", + "vm2": "^3.9.19", + "vm2-fixed": "^0.0.1", + "weather-js": "^2.0.0", + "wikipedia": "^2.1.1", + "wunderground-api": "^1.1.4" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.2.0.tgz", + "integrity": "sha512-oUYJcdpmDlgs4DPthu8J1aWmOMhQanS/On6b22bpbZl+KOfVhgoF7dKlGuqaRXyH8GgnPy+vCyOyMva3Ge9UXA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.3.0.tgz", + "integrity": "sha512-sgUXmbBTBUncAeeS1m399s77Cih0xQbLRvob8pfdBW45/LTfFko9V3mX41gjnPDB037Fl4hVtwJ92GVCrI7jgw==", + "dependencies": { + "@azure/msal-common": "14.2.0", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": "18 || 20" + } + }, + "node_modules/@azure/msal-node/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", + "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", + "dependencies": { + "@discordjs/formatters": "^0.3.2", + "@discordjs/util": "^1.0.1", + "@sapphire/shapeshift": "^3.9.2", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", + "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "dependencies": { + "discord-api-types": "0.37.50" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", + "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "magic-bytes.js": "^1.0.15", + "tslib": "^2.6.1", + "undici": "5.22.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", + "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", + "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.5", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" + }, + "node_modules/@jimp/bmp": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.22.10.tgz", + "integrity": "sha512-1UXRl1Nw1KptZ1r0ANqtXOst9vGH51dq7keVKQzyyTO2lz4dOaezS9StuSTNh+RmiHg/SVPaFRpPfB0S/ln4Kg==", + "dependencies": { + "@jimp/utils": "^0.22.10", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.10.tgz", + "integrity": "sha512-ZKyrehVy6wu1PnBXIUpn/fXmyMRQiVSbvHDubgXz4bfTOao3GiOurKHjByutQIgozuAN6ZHWiSge1dKA+dex3w==", + "dependencies": { + "@jimp/utils": "^0.22.10", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^16.5.4", + "isomorphic-fetch": "^3.0.0", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.6.0" + } + }, + "node_modules/@jimp/custom": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.10.tgz", + "integrity": "sha512-sPZkUYe1hu0iIgNisjizxPJqq2vaaKvkCkPoXq2U6UV3ZA1si/WVdrg25da3IcGIEV+83AoHgM8TvqlLgrCJsg==", + "dependencies": { + "@jimp/core": "^0.22.10" + } + }, + "node_modules/@jimp/gif": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.22.10.tgz", + "integrity": "sha512-yEX2dSpamvkSx1PPDWGnKeWDrBz0vrCKjVG/cn4Zr68MRRT75tbZIeOrBa+RiUpY3ho5ix7d36LkYvt3qfUIhQ==", + "dependencies": { + "@jimp/utils": "^0.22.10", + "gifwrap": "^0.10.1", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.10.tgz", + "integrity": "sha512-6bu98pAcVN4DY2oiDLC4TOgieX/lZrLd1tombWZOFCN5PBmqaHQxm7IUmT+Wj4faEvh8QSHgVLSA+2JQQRJWVA==", + "dependencies": { + "@jimp/utils": "^0.22.10", + "jpeg-js": "^0.4.4" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.10.tgz", + "integrity": "sha512-6EI8Sl+mxYHEIy6Yteh6eknD+EZguKpNdr3sCKxNezmLR0+vK99vHcllo6uGSjXXiwtwS67Xqxn8SsoatL+UJQ==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.10.tgz", + "integrity": "sha512-4XRTWuPVdMXJeclJMisXPGizeHtTryVaVV5HnuQXpKqIZtzXReCCpNGH8q/i0kBQOQMXhGWS3mpqOEwtpPePKw==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.10.tgz", + "integrity": "sha512-mhcwTO1ywRxiCgtLGge6tDDIDPlX6qkI3CY+BjgGG/XhVHccCddXgOGLdlf+5OuKIEF2Nqs0V01LQEQIJFTmEw==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.10.tgz", + "integrity": "sha512-e4t3L7Kedd96E0x1XjsTM6NcgulKUU66HdFTao7Tc9FYJRFSlttARZ/C6LEryGDm/i69R6bJEpo7BkNz0YL55Q==", + "dependencies": { + "@jimp/utils": "^0.22.10", + "tinycolor2": "^1.6.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.10.tgz", + "integrity": "sha512-eP8KrzctuEoqibQAxi9WhbnoRosydhiwg+IYya3dKuKDBTrD9UHt+ERlPQ/lTNWHzV/l4S1ntV3r9s9saJgsXA==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.10.tgz", + "integrity": "sha512-kJCwL5T1igfa0InCfkE7bBeqg26m46aoRt10ug+rvm11P6RrvRMGrgINFyIKB+mnB7CiyBN/MOula1CvLhSInQ==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.10.tgz", + "integrity": "sha512-BOZ+YGaZlhU7c5ye65RxikicXH0Ki0It6/XHISvipR5WZrfjLjL2Ke20G+AGnwBQc76gKenVcMXVUCnEjtZV+Q==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.10.tgz", + "integrity": "sha512-llNiWWMTKISDXt5+cXI0GaFmZWAjlT+4fFLYf4eXquuL/9wZoQsEBhv2GdGd48mkiS8jZq1Nnb2Q4ehEPTvrzw==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.10.tgz", + "integrity": "sha512-05WLmeV5M+P/0FS+bWf13hMew2X0oa8w9AtmevL2UyA/5GqiyvP2Xm5WfGQ8oFiiMvpnL6RFomJQOZtWca0C2w==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.10.tgz", + "integrity": "sha512-InjiXvc7Gkzrx8VWtU97kDqV7ENnhHGPULymJWeZaF2aicud9Fpk4iCtd/DcZIrk7Cbe60A8RwNXN00HXIbSCg==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.10.tgz", + "integrity": "sha512-42GkGtTHWnhnwTMPVK/kXObZbkYIpQWfuIfy5EMEMk6zRj05zpv4vsjkKWfuemweZINwfvD7wDJF7FVFNNcZZg==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.10.tgz", + "integrity": "sha512-ykrG/6lTp9Q5YA8jS5XzwMHtRxb9HOFMgtmnrUZ8kU+BK8REecfy9Ic5BUEOjCYvS1a/xLsnrZQU07iiYxBxFg==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.10.tgz", + "integrity": "sha512-d8j9BlUJYs/c994t4azUWSWmQq4LLPG4ecm8m6SSNqap+S/HlVQGqjYhJEBbY9EXkOTYB9vBL9bqwSM1Rr6paA==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.10.tgz", + "integrity": "sha512-yRBs1230XZkz24uFTdTcSlZ0HXZpIWzM3iFQN56MzZ7USgdVZjPPDCQ8I9RpqfZ36nDflQkUO0wV7ucsi4ogow==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.10.tgz", + "integrity": "sha512-Wk9GX6eJMchX/ZAazVa70Fagu+OXMvHiPY+HrcEwcclL+p1wo8xAHEsf9iKno7Ja4EU9lLhbBRY5hYJyiKMEkg==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.10.tgz", + "integrity": "sha512-1U3VloIR+beE1kWPdGEJMiE2h1Do29iv3w8sBbvPyRP4qXxRFcDpmCGtctsrKmb1krlBFlj8ubyAY90xL+5n9w==", + "dependencies": { + "@jimp/utils": "^0.22.10", + "load-bmfont": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.10.tgz", + "integrity": "sha512-ixomxVcnAONXDgaq0opvAx4UAOiEhOA/tipuhFFOvPKFd4yf1BAnEviB5maB0SBHHkJXPUSzDp/73xVTMGSe7g==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.10.tgz", + "integrity": "sha512-eeFX8dnRyf3LAdsdXWKWuN18hLRg8zy1cP0cP9rHzQVWRK7ck/QsLxK1vHq7MADGwQalNaNTJ9SQxH6c8mz6jw==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.10.tgz", + "integrity": "sha512-TG/H0oUN69C9ArBCZg4PmuoixFVKIiru8282KzSB/Tp1I0xwX0XLTv3dJ5pobPlIgPcB+TmD4xAIdkCT4rtWxg==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.10.tgz", + "integrity": "sha512-TN9xm6fI7XfxbMUQqFPZjv59Xdpf0tSiAQdINB4g6pJMWiVANR/74OtDONoy3KKpenu5Y38s+FkrtID/KcQAhw==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.10.tgz", + "integrity": "sha512-DA2lSnU0TgIRbAgmXaxroYw3Ad6J2DOFEoJp0NleSm2h3GWbZEE5yW9U2B6hD3iqn4AenG4E2b2WzHXZyzSutw==", + "dependencies": { + "@jimp/utils": "^0.22.10" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.22.10.tgz", + "integrity": "sha512-KDMZyM6pmvS8freB+UBLko1TO/k4D7URS/nphCozuH+P7i3UMe7NdckXKJ8u+WD6sqN0YFYvBehpkpnUiw/91w==", + "dependencies": { + "@jimp/plugin-blit": "^0.22.10", + "@jimp/plugin-blur": "^0.22.10", + "@jimp/plugin-circle": "^0.22.10", + "@jimp/plugin-color": "^0.22.10", + "@jimp/plugin-contain": "^0.22.10", + "@jimp/plugin-cover": "^0.22.10", + "@jimp/plugin-crop": "^0.22.10", + "@jimp/plugin-displace": "^0.22.10", + "@jimp/plugin-dither": "^0.22.10", + "@jimp/plugin-fisheye": "^0.22.10", + "@jimp/plugin-flip": "^0.22.10", + "@jimp/plugin-gaussian": "^0.22.10", + "@jimp/plugin-invert": "^0.22.10", + "@jimp/plugin-mask": "^0.22.10", + "@jimp/plugin-normalize": "^0.22.10", + "@jimp/plugin-print": "^0.22.10", + "@jimp/plugin-resize": "^0.22.10", + "@jimp/plugin-rotate": "^0.22.10", + "@jimp/plugin-scale": "^0.22.10", + "@jimp/plugin-shadow": "^0.22.10", + "@jimp/plugin-threshold": "^0.22.10", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.10.tgz", + "integrity": "sha512-RYinU7tZToeeR2g2qAMn42AU+8OUHjXPKZZ9RkmoL4bguA1xyZWaSdr22/FBkmnHhOERRlr02KPDN1OTOYHLDQ==", + "dependencies": { + "@jimp/utils": "^0.22.10", + "pngjs": "^6.0.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.10.tgz", + "integrity": "sha512-OaivlSYzpNTHyH/h7pEtl3A7F7TbsgytZs52GLX/xITW92ffgDgT6PkldIrMrET6ERh/hdijNQiew7IoEEr2og==", + "dependencies": { + "utif2": "^4.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.10.tgz", + "integrity": "sha512-u/r+XYzbCx4zZukDmxx8S0er3Yq3iDPI6+31WKX0N18i2qPPJYcn8qwIFurfupRumGvJ8SlGLCgt/T+Y8zzUIw==", + "dependencies": { + "@jimp/bmp": "^0.22.10", + "@jimp/gif": "^0.22.10", + "@jimp/jpeg": "^0.22.10", + "@jimp/png": "^0.22.10", + "@jimp/tiff": "^0.22.10", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.10.tgz", + "integrity": "sha512-ztlOK9Mm2iLG2AMoabzM4i3WZ/FtshcgsJCbZCRUs/DKoeS2tySRJTnQZ1b7Roq0M4Ce+FUAxnCAcBV0q7PH9w==", + "dependencies": { + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", + "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/arborist": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.2.0.tgz", + "integrity": "sha512-J6XCan+5nV6F94E0+9z//OnZADcqHw6HGDO0ynX+Ayd6GEopK0odq99V+UQjb8P1zexTmCWGvxp4jU5OM6NTtg==", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^7.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/query": "^3.0.1", + "@npmcli/run-script": "^7.0.1", + "bin-links": "^4.0.1", + "cacache": "^18.0.0", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^7.0.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.5", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.3.tgz", + "integrity": "sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", + "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/metavuln-calculator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.0.0.tgz", + "integrity": "sha512-Pw0tyX02VkpqlIQlG2TeiJNsdrecYeUU0ubZZa9pi3N37GCsxI+en43u4hYFdq+eSx1A9a9vwFAUyqEtKFsbHQ==", + "dependencies": { + "cacache": "^18.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^17.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@npmcli/move-file/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/move-file/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", + "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz", + "integrity": "sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/query": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.1.tgz", + "integrity": "sha512-0jE8iHBogf/+bFDj+ju6/UMLbJ39c8h6nSe6qile+dB7PJ0iV3gNqcb2vtt6WWCBrxv9uAjzUT/8vroluulidA==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.1.tgz", + "integrity": "sha512-Od/JMrgkjZ8alyBE0IzeqZDiF1jgMez9Gkc/OYrCkHHiXNwM0wc6s7+h+xM7kYDZkS0tAoOLr9VvygyE5+2F7g==", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.3.tgz", + "integrity": "sha512-WzKJSwDYloSkHoBbE8rkRW8UNKJiSRJ/P8NqJ5iVq7U2Yr/kriIBx2hW+wj2Z5e5EnXL1hgYomgaFsdK6b+zqQ==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz", + "integrity": "sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.0.tgz", + "integrity": "sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==", + "dependencies": { + "@sigstore/bundle": "^2.1.0", + "@sigstore/protobuf-specs": "^0.2.1", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.2.0.tgz", + "integrity": "sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.1", + "tuf-js": "^2.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "node_modules/@tonejs/midi": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/@tonejs/midi/-/midi-2.0.28.tgz", + "integrity": "sha512-RII6YpInPsOZ5t3Si/20QKpNqB1lZ2OCFJSOzJxz38YdY/3zqDr3uaml4JuCWkdixuPqP1/TBnXzhQ39csyoVg==", + "dependencies": { + "array-flatten": "^3.0.0", + "midi-file": "^1.2.2" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.10.tgz", + "integrity": "sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==" + }, + "node_modules/@types/http-errors": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", + "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.33.tgz", + "integrity": "sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==" + }, + "node_modules/@types/node": { + "version": "20.8.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", + "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/readable-stream": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.4.tgz", + "integrity": "sha512-NSAiePj3Iq3kBArfpUWRNX/mRw8DibYD6YhNCIJDfUP/iIOQYsNJgtHyjpbuZlcbL7TxILS8qYjY/nXXvtcFQg==", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", + "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.2.tgz", + "integrity": "sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitalets/google-translate-api": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.0.tgz", + "integrity": "sha512-w98IPWGuexlGmh8Y19AxF6cgWT0U5JLevVNDKEuFpTWtBC9z3YtDWKTDxF3nPP1k9bWicuB1V7I7YfHoZiDScw==", + "dependencies": { + "@types/http-errors": "^1.8.2", + "http-errors": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@xboxreplay/errors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@xboxreplay/errors/-/errors-0.1.0.tgz", + "integrity": "sha512-Tgz1d/OIPDWPeyOvuL5+aai5VCcqObhPnlI3skQuf80GVF3k1I0lPCnGC+8Cm5PV9aLBT5m8qPcJoIUQ2U4y9g==" + }, + "node_modules/@xboxreplay/xboxlive-auth": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@xboxreplay/xboxlive-auth/-/xboxlive-auth-3.3.3.tgz", + "integrity": "sha512-j0AU8pW10LM8O68CTZ5QHnvOjSsnPICy0oQcP7zyM7eWkDQ/InkiQiirQKsPn1XRYDl4ccNu0WM582s3UKwcBg==", + "dependencies": { + "@xboxreplay/errors": "^0.1.0", + "axios": "^0.21.1" + } + }, + "node_modules/@xboxreplay/xboxlive-auth/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ansi-styles/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz", + "integrity": "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + }, + "node_modules/asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w==" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, + "node_modules/axios": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" + }, + "node_modules/babel-runtime": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", + "integrity": "sha512-KpgoA8VE/pMmNCrnEeeXqFG24TIH11Z3ZaimIhJWsin8EbfZy3WzFKUTIan10ZIDgRVvi9EkLbruJElJC9dRlg==", + "dependencies": { + "core-js": "^1.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/bin-links": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.3.tgz", + "integrity": "sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA==", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/cacache": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.0.tgz", + "integrity": "sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/chromium/-/chromium-3.0.3.tgz", + "integrity": "sha512-TfbzP/3t38Us5xrbb9x87M/y5I/j3jx0zeJhhQ72gjp6dwJuhVP6hBZnBH4wEg7512VVXk9zCfTuPFOdw7bQqg==", + "hasInstallScript": true, + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "cachedir": "^2.3.0", + "debug": "^4.1.0", + "extract-zip": "^1.7.0", + "got": "^11.5.1", + "progress": "^2.0.3", + "rimraf": "^2.7.1", + "tmp": "0.0.33", + "tunnel": "^0.0.6" + } + }, + "node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "dependencies": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cmd-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.2.tgz", + "integrity": "sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js." + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cowsay2": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cowsay2/-/cowsay2-2.0.4.tgz", + "integrity": "sha512-q8iyB0HMF+HSoYeE5Pk4vNdk0mBDFakIzoFPmi1u5ZhcetvUogz2bdKM2pgF+Drn5oYoFr1a7OHwUq54A1HXlw==", + "dependencies": { + "string-width": "^4" + }, + "bin": { + "cowsay2": "cli.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + }, + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, + "node_modules/discord-api-types": { + "version": "0.37.50", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", + "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==" + }, + "node_modules/discord.js": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", + "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", + "dependencies": { + "@discordjs/builders": "^1.6.5", + "@discordjs/collection": "^1.5.3", + "@discordjs/formatters": "^0.3.2", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@discordjs/ws": "^1.0.1", + "@sapphire/snowflake": "^3.5.1", + "@types/ws": "^8.5.5", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.6.1", + "undici": "5.22.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/endian-toggle": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/endian-toggle/-/endian-toggle-0.0.0.tgz", + "integrity": "sha512-ShfqhXeHRE4TmggSlHXG8CMGIcsOsqDw/GcoPcosToE59Rm9e4aXaMhEQf2kPBsBRrKem1bbOAv5gOKnkliMFQ==" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", + "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gifwrap": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", + "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/infobox-parser": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/infobox-parser/-/infobox-parser-3.6.2.tgz", + "integrity": "sha512-lasdwvbtjCtDDO6mArAs/ueFEnBJRyo2UbZPAkd5rEG5NVJ3XFCOvbMwNTT/rJlFv1+ORw8D3UvZV4brpgATCg==", + "dependencies": { + "camelcase": "^4.1.0" + }, + "funding": { + "type": "individual", + "url": "https://www.buymeacoffee.com/2tmRKi9" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isolated-vm": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/isolated-vm/-/isolated-vm-4.6.0.tgz", + "integrity": "sha512-MEnfC/54q5PED3VJ9UJYJPOlU6mYFHS3ivR9E8yeNNBEFRFUNBnY0xO4Rj3D/SOtFKPNmsQp9NWUYSKZqAoZiA==", + "hasInstallScript": true, + "dependencies": { + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jimp": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.10.tgz", + "integrity": "sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==", + "dependencies": { + "@jimp/custom": "^0.22.10", + "@jimp/plugins": "^0.22.10", + "@jimp/types": "^0.22.10", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/jose": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", + "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + }, + "node_modules/js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "node_modules/js-sha1": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", + "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==" + }, + "node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/load-bmfont/node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/load-bmfont/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._basecallback": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz", + "integrity": "sha512-LQffghuO63ufDY33KKO1ezGKbcFZK3ngYV7JpxaUomoM5acf0YeXU3Pm8csVE0girVs50TXzfNibl69Co3ggJA==", + "dependencies": { + "lodash._baseisequal": "^3.0.0", + "lodash._bindcallback": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.pairs": "^3.0.0" + } + }, + "node_modules/lodash._baseeach": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz", + "integrity": "sha512-IqUZ9MQo2UT1XPGuBntInqTOlc+oV+bCo0kMp+yuKGsfvRSNgUW0YjWVZUrG/gs+8z/Eyuc0jkJjOBESt9BXxg==", + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._baseisequal": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", + "integrity": "sha512-U+3GsNEZj9ebI03ncLC2pLmYVjgtYZEwdkAPO7UGgtGvAz36JVFPAQUufpSaVL93Cz5arc6JGRKZRhaOhyVJYA==", + "dependencies": { + "lodash.isarray": "^3.0.0", + "lodash.istypedarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._basereduce": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._basereduce/-/lodash._basereduce-3.0.2.tgz", + "integrity": "sha512-ARxgijEw8X62Y8HGgxVIKWIz0+GNPJa9CFZY8nAcGIU+rBMgS9szd/Fw52yaDg4QZZT3DJfFbOjMUZ3D+WPVgA==" + }, + "node_modules/lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==" + }, + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.istypedarray": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", + "integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw==" + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "dependencies": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lodash.pairs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz", + "integrity": "sha512-lgXvpU43ZNQrZ/pK2cR97YzKeAno3e3HhcyvLKsofljeHKrQcZhT1vW7fg4X61c92tM+mjD/DypoLZYuAKNIkQ==", + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/macaddress": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.5.3.tgz", + "integrity": "sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==" + }, + "node_modules/magic-bytes.js": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.5.0.tgz", + "integrity": "sha512-wJkXvutRbNWcc37tt5j1HyOK1nosspdh3dj6LUYYAvF6JYNqs53IfRvK9oEpcwiDA1NdoIi64yAMfdivPeVAyw==" + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "dependencies": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/midi-file": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/midi-file/-/midi-file-1.2.4.tgz", + "integrity": "sha512-B5SnBC6i2bwJIXTY9MElIydJwAmnKx+r5eJ1jknTLetzLflEl0GWveuBB6ACrQpecSRkOB6fhTx1PwXk2BVxnA==" + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minecraft-data": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/minecraft-data/-/minecraft-data-3.47.0.tgz", + "integrity": "sha512-3t/jys9Xw6a0o3rWdUJAkE4p+9Y2bg2x4JCfXuEoNC2JZBld44HhvQ9Qa0RslaWMi/hedkmEBJbtTTGEP20jjQ==" + }, + "node_modules/minecraft-folder-path": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minecraft-folder-path/-/minecraft-folder-path-1.2.0.tgz", + "integrity": "sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==" + }, + "node_modules/minecraft-protocol": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/minecraft-protocol/-/minecraft-protocol-1.44.0.tgz", + "integrity": "sha512-sYu4fFzUKt3spPG5tAdkaB9sNQPT0sV6fyS0sS7/nxdzFfjmLhF6BLNC+32ieK4/MhgNyHtH6xusD0Bi0Roq9w==", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "aes-js": "^3.1.2", + "buffer-equal": "^1.0.0", + "debug": "^4.3.2", + "endian-toggle": "^0.0.0", + "lodash.get": "^4.1.2", + "lodash.merge": "^4.3.0", + "minecraft-data": "^3.37.0", + "minecraft-folder-path": "^1.2.0", + "node-fetch": "^2.6.1", + "node-rsa": "^0.4.2", + "prismarine-auth": "^2.2.0", + "prismarine-nbt": "^2.0.0", + "prismarine-realms": "^1.2.0", + "protodef": "^1.8.0", + "readable-stream": "^4.1.0", + "uuid-1345": "^1.0.1", + "yggdrasil": "^1.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/minecraft-protocol-forge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minecraft-protocol-forge/-/minecraft-protocol-forge-1.0.0.tgz", + "integrity": "sha512-ymTI512qJhW9/wNCAcifC+21AhuomkAF+vXSEnsLEENFNXftZTxwgghO3t6YYFYueFD9ETJ+Lu75Y3u6f5h1BA==", + "dependencies": { + "protodef": "0.2.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minecraft-protocol-forge/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/minecraft-protocol-forge/node_modules/lodash.reduce": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-3.1.2.tgz", + "integrity": "sha512-EG+btfjU+5R+t6R7eVvjkcAsQFmSbFqVHcf2rRFdT/VzDFWFJHRmAW2bT7vLFnEZZD+KlbluSBUA3yI2Ldh57g==", + "dependencies": { + "lodash._basecallback": "^3.0.0", + "lodash._baseeach": "^3.0.0", + "lodash._basereduce": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/minecraft-protocol-forge/node_modules/protodef": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/protodef/-/protodef-0.2.5.tgz", + "integrity": "sha512-4EZvHx1MhrgzZYmSVu0hi06ihW4kmAG307tF1a5HqKXMZhbQyFr2SE6V5gazJ0cJmwzIxguaPIT9LKCFTMMcRg==", + "dependencies": { + "babel-runtime": "^5.4.4", + "lodash.reduce": "^3.1.2", + "readable-stream": "^1.1.0", + "yargs": "^1.3.1" + } + }, + "node_modules/minecraft-protocol-forge/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/minecraft-protocol-forge/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/minecraft-protocol-forge/node_modules/yargs": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz", + "integrity": "sha512-7OGt4xXoWJQh5ulgZ78rKaqY7dNWbjfK+UKxGcIlaM2j7C4fqGchyv8CPvEWdRPrHp6Ula/YU8yGRpYGOHrI+g==" + }, + "node_modules/minecraft-protocol/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/minecraft-protocol/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/minecraft-protocol/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/minecraft-protocol/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/mineflayer": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mineflayer/-/mineflayer-4.14.0.tgz", + "integrity": "sha512-4EYzUmZNxH3Gpz3GkgO2eaR90ANb50nVhMCU2y6Rl1Ru8M6HqxID1Eg7tRgsodfAOD+AKh5SPwmPnISLcxvnOA==", + "dependencies": { + "minecraft-data": "^3.44.0", + "minecraft-protocol": "^1.44.0", + "prismarine-biome": "^1.1.1", + "prismarine-block": "^1.17.0", + "prismarine-chat": "^1.7.1", + "prismarine-chunk": "^1.34.0", + "prismarine-entity": "^2.3.0", + "prismarine-item": "^1.14.0", + "prismarine-nbt": "^2.0.0", + "prismarine-physics": "^1.8.0", + "prismarine-recipe": "^1.3.0", + "prismarine-registry": "^1.5.0", + "prismarine-windows": "^2.8.0", + "prismarine-world": "^3.6.0", + "protodef": "^1.14.0", + "typed-emitter": "^1.0.0", + "vec3": "^0.1.7" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/mineflayer-cmd": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mineflayer-cmd/-/mineflayer-cmd-1.1.3.tgz", + "integrity": "sha512-CIF4pmgWZgJo8EAqA+g5oim5WMf7omUxqozzdiCJ9eqMdnV4GB7j8r8LtBjZITl8VimE8IB9yPCvMIsamFjHvA==", + "dependencies": { + "mineflayer": "^2.31.0" + } + }, + "node_modules/mineflayer-cmd/node_modules/minecraft-data": { + "version": "2.221.0", + "resolved": "https://registry.npmjs.org/minecraft-data/-/minecraft-data-2.221.0.tgz", + "integrity": "sha512-0AhqzbIKb6WqPSF6qBevaPryeWOz545hLxt6q+gfJF8YIQX/YfkyX/nXWhl+pSIS2rTBcQ0RJkRCtTeRzQwHDA==" + }, + "node_modules/mineflayer-cmd/node_modules/mineflayer": { + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/mineflayer/-/mineflayer-2.41.0.tgz", + "integrity": "sha512-IFFy4NgF24FU2PkAwazJphl2F+3gpbpN578ex0sq1XfcBBRge3kCz1UC2KDMjKI+V/8vffOL+OEnug9jt3f7Vw==", + "dependencies": { + "minecraft-data": "^2.70.0", + "minecraft-protocol": "^1.17.0", + "prismarine-biome": "^1.1.0", + "prismarine-block": "^1.6.0", + "prismarine-chat": "^1.0.0", + "prismarine-chunk": "^1.20.3", + "prismarine-entity": "^1.0.0", + "prismarine-item": "^1.5.0", + "prismarine-physics": "^1.0.4", + "prismarine-recipe": "^1.1.0", + "prismarine-windows": "^1.5.0", + "prismarine-world": "^3.2.0", + "protodef": "^1.8.0", + "typed-emitter": "^1.2.0", + "vec3": "^0.1.6" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/mineflayer-cmd/node_modules/prismarine-entity": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prismarine-entity/-/prismarine-entity-1.2.0.tgz", + "integrity": "sha512-4dQ9LYl6HDJQrwZHjSKU4D5VNyHRnfrjcw7eVLlbRPkuR50utW5mmfPi4ys9U7tHNmGWHC/cwjH9xzT75LUovQ==", + "dependencies": { + "vec3": "^0.1.4" + } + }, + "node_modules/mineflayer-cmd/node_modules/prismarine-windows": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/prismarine-windows/-/prismarine-windows-1.6.0.tgz", + "integrity": "sha512-026LG1yR76Xb62kM+W83IWT7Wy2yKplllbXNFBF2m0Lr4k4YpYKnpLb8tRft8MLOLRbYAt/KnxE/YKvRZul7kw==", + "dependencies": { + "prismarine-item": "^1.4.0" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/mojangson": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mojangson/-/mojangson-2.0.4.tgz", + "integrity": "sha512-HYmhgDjr1gzF7trGgvcC/huIg2L8FsVbi/KacRe6r1AswbboGVZDS47SOZlomPuMWvZLas8m9vuHHucdZMwTmQ==", + "dependencies": { + "nearley": "^2.19.5" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.43", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", + "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node_characterai": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node_characterai/-/node_characterai-1.2.1.tgz", + "integrity": "sha512-Y0Jwb4X8gXlNGsD8DjOenN9wAzqn1l8dDaDTqI/L5mnRvoCm4yLtocuiN+zAlwjx9ZSsjGFBRQUkBNfi9lKyYA==", + "dependencies": { + "jimp": "^0.22.8", + "json-bigint": "^1.0.0", + "mime": "^3.0.0", + "node-fetch": "^3.3.0", + "puppeteer": "^19.7.5", + "puppeteer-extra": "^3.3.6", + "puppeteer-extra-plugin-stealth": "^2.11.2", + "uuid": "^9.0.0" + } + }, + "node_modules/node_characterai_edited": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/node_characterai_edited/-/node_characterai_edited-1.1.5.tgz", + "integrity": "sha512-PWU8B8lnae/Oh7RprJ+/krkCqpsszJPW1WYF9SfnnG1Pw7epCbODVVQSt/yVX50cqEsG2R+k1XmSA2KVDfL+bQ==", + "dependencies": { + "node-fetch": "^3.3.0", + "uuid": "^9.0.0" + } + }, + "node_modules/node_characterai_edited/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node_characterai/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-abi": { + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/node-gyp/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/node-gyp/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-rsa": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.4.2.tgz", + "integrity": "sha512-Bvso6Zi9LY4otIZefYrscsUpo2mUpiAVIEmSZV2q41sP8tHZoert3Yu6zv4f/RXJqMNZQKCtnhDugIuCma23YA==", + "dependencies": { + "asn1": "0.2.3" + } + }, + "node_modules/node-weatherunderground": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-weatherunderground/-/node-weatherunderground-1.2.0.tgz", + "integrity": "sha512-VS8xa5Bk/LkcWnAkx8eXzl1XHPg3SaAJNiX+ar+hk8SgeZC65vcgwNmGxmktzIDsXUdrWDk/WubAVTXlp93PrQ==", + "dependencies": { + "request": "^2.44.0" + } + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.0.tgz", + "integrity": "sha512-ErAGFB5kJUciPy1mmx/C2YFbvxoJ0QJ9uwkCZOeR6CqLLISPZBOiFModAbSXnjjlwW5lOhuhXva+fURsSGJqyw==", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", + "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", + "dependencies": { + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npmlog": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", + "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openweather-api-node": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/openweather-api-node/-/openweather-api-node-3.1.2.tgz", + "integrity": "sha512-PPV1SrEMVi96n23c+si0SbiFD0xn5RyasOm/NVuSaV8E7YF4XtJRxTzLmbB0CjD/i5MxrjQ9x9DFNrl423XGKg==" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.4.tgz", + "integrity": "sha512-eGdLHrV/g5b5MtD5cTPyss+JxOlaOloSMG3UwPMAvL8ywaLJ6beONPF40K4KKl/UI6q5hTKCJq5rCu8tkF+7Dg==", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "node_modules/parse-conflict-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", + "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prismarine-auth": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prismarine-auth/-/prismarine-auth-2.3.0.tgz", + "integrity": "sha512-giKZiHwuQdpMJ7KX94UncOJqM3u+yqKIR2UI/rqmdmFUuQilV9vhlz/zehpVkvo7FE8gmZsuUMCUPhI+gtgd3A==", + "dependencies": { + "@azure/msal-node": "^2.0.2", + "@xboxreplay/xboxlive-auth": "^3.3.3", + "debug": "^4.3.3", + "jose": "^4.1.4", + "node-fetch": "^2.6.1", + "smart-buffer": "^4.1.0", + "uuid-1345": "^1.0.2" + } + }, + "node_modules/prismarine-biome": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prismarine-biome/-/prismarine-biome-1.3.0.tgz", + "integrity": "sha512-GY6nZxq93mTErT7jD7jt8YS1aPrOakbJHh39seYsJFXvueIOdHAmW16kYQVrTVMW5MlWLQVxV/EquRwOgr4MnQ==", + "peerDependencies": { + "minecraft-data": "^3.0.0", + "prismarine-registry": "^1.1.0" + } + }, + "node_modules/prismarine-block": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/prismarine-block/-/prismarine-block-1.17.1.tgz", + "integrity": "sha512-r1TIn/b5v77BX4a+qd+Yv+4/vZpsC/Jp5ElYxd6++2wpCnqiuxVG7BlS2Eo14vez1M2gt3qoNEl54Hr8qox/rQ==", + "dependencies": { + "minecraft-data": "^3.38.0", + "prismarine-biome": "^1.1.0", + "prismarine-chat": "^1.5.0", + "prismarine-item": "^1.10.1", + "prismarine-nbt": "^2.0.0", + "prismarine-registry": "^1.1.0" + } + }, + "node_modules/prismarine-chat": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/prismarine-chat/-/prismarine-chat-1.9.1.tgz", + "integrity": "sha512-x7WWa5MNhiLZSO6tw+YyKpzquFZ+DNISVgiV6K3SU0GsishMXe+nto02WhF/4AuFerKdugm9u1d/r4C4zSkJOg==", + "dependencies": { + "mojangson": "^2.0.1", + "prismarine-item": "^1.10.0", + "prismarine-nbt": "^2.0.0", + "prismarine-registry": "^1.4.0" + } + }, + "node_modules/prismarine-chunk": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/prismarine-chunk/-/prismarine-chunk-1.35.0.tgz", + "integrity": "sha512-Q1lElMUle7wWxWdQjbZo3j2/dLNG325j90IcbbMmBTnHdQSWIjWFe792XOz3RVBlvrhRJEiZk38S6/eQTQ9esw==", + "dependencies": { + "prismarine-biome": "^1.2.0", + "prismarine-block": "^1.14.1", + "prismarine-nbt": "^2.2.1", + "prismarine-registry": "^1.1.0", + "smart-buffer": "^4.1.0", + "uint4": "^0.1.2", + "vec3": "^0.1.3", + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/prismarine-entity": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prismarine-entity/-/prismarine-entity-2.3.1.tgz", + "integrity": "sha512-HOv8l7IetHNf4hwZ7V/W4vM3GNl+e6VCtKDkH9h02TRq7jWngsggKtJV+VanCce/sNwtJUhJDjORGs728ep4MA==", + "dependencies": { + "prismarine-chat": "^1.4.1", + "prismarine-item": "^1.11.2", + "prismarine-registry": "^1.4.0", + "vec3": "^0.1.4" + } + }, + "node_modules/prismarine-item": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/prismarine-item/-/prismarine-item-1.14.0.tgz", + "integrity": "sha512-udQHYGJ05klFe8Kkc0TOmwoXj5Xl1ZPgHVoMbGUAFB9exN4TFxEa1A39vkSYhxP5Et9PNufQQvFBFVom0nXikA==", + "dependencies": { + "prismarine-nbt": "^2.0.0", + "prismarine-registry": "^1.4.0" + } + }, + "node_modules/prismarine-nbt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prismarine-nbt/-/prismarine-nbt-2.2.1.tgz", + "integrity": "sha512-Mb50c58CPnuZ+qvM31DBa08tf9UumlTq1LkvpMoUpKfCuN05GZHTqCUwER3lxTSHLL0GZKghIPbYR/JQkINijQ==", + "dependencies": { + "protodef": "^1.9.0" + } + }, + "node_modules/prismarine-physics": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/prismarine-physics/-/prismarine-physics-1.8.0.tgz", + "integrity": "sha512-gbM+S+bmVtOKVv+Z0WGaHMeEeBHISIDsRDRlv8sr0dex3ZJRhuq8djA02CBreguXtI18ZKh6q3TSj2qDr45NHA==", + "dependencies": { + "minecraft-data": "^3.0.0", + "prismarine-nbt": "^2.0.0", + "vec3": "^0.1.7" + } + }, + "node_modules/prismarine-realms": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prismarine-realms/-/prismarine-realms-1.3.2.tgz", + "integrity": "sha512-5apl9Ru8veTj5q2OozRc4GZOuSIcs3yY4UEtALiLKHstBe8bRw8vNlaz4Zla3jsQ8yP/ul1b1IJINTRbocuA6g==", + "dependencies": { + "debug": "^4.3.3", + "node-fetch": "^2.6.1" + } + }, + "node_modules/prismarine-recipe": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prismarine-recipe/-/prismarine-recipe-1.3.1.tgz", + "integrity": "sha512-xfa9E9ACoaDi+YzNQ+nk8kWSIqt5vSZOOCHIT+dTXscf/dng2HaJ/59uwe1D/jvOkAd2OvM6RRJM6fFe0q/LDA==", + "peerDependencies": { + "prismarine-registry": "^1.4.0" + } + }, + "node_modules/prismarine-registry": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/prismarine-registry/-/prismarine-registry-1.7.0.tgz", + "integrity": "sha512-yyva0FpWI078nNeMhx8ekVza5uUTYhEv+C+ADu3wUQXiG8qhXkvrf0uzsnhTgZL8BLdsi2axgCEiKw9qSKIuxQ==", + "dependencies": { + "minecraft-data": "^3.0.0", + "prismarine-nbt": "^2.0.0" + } + }, + "node_modules/prismarine-windows": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/prismarine-windows/-/prismarine-windows-2.8.0.tgz", + "integrity": "sha512-9HVhJ8tfCeRubYwQzgz8oiHNAebMJ5hDdjm45PZwrOgewaislnR2HDsbPMWiCcyWkYL7J8bVLVoSzEzv5pH98g==", + "dependencies": { + "prismarine-item": "^1.12.2", + "prismarine-registry": "^1.7.0", + "typed-emitter": "^2.1.0" + } + }, + "node_modules/prismarine-windows/node_modules/typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", + "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", + "optionalDependencies": { + "rxjs": "*" + } + }, + "node_modules/prismarine-world": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prismarine-world/-/prismarine-world-3.6.2.tgz", + "integrity": "sha512-xNNo3bd8EnCMjiPbVrh3jYa1Upa8Krkb13BgO7FOOfD5ZYf+iYDZewBtDbHYWzZZB2N0JlTtimMOHRhZhDJirw==", + "dependencies": { + "vec3": "^0.1.7" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", + "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/protodef": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/protodef/-/protodef-1.15.0.tgz", + "integrity": "sha512-bZ2Omw8dT+DACjJHLrBWZlqN4MlT9g9oSpJDdkUAJOStUzgJp+Zn42FJfPUdwutUxjaxA0PftN0PDlNa2XbneA==", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.reduce": "^4.6.0", + "protodef-validator": "^1.3.0", + "readable-stream": "^3.0.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/protodef-validator": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/protodef-validator/-/protodef-validator-1.3.1.tgz", + "integrity": "sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==", + "dependencies": { + "ajv": "^6.5.4" + }, + "bin": { + "protodef-validator": "cli.js" + } + }, + "node_modules/protodef/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/puppeteer-extra/-/puppeteer-extra-3.3.6.tgz", + "integrity": "sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==", + "dependencies": { + "@types/debug": "^4.1.0", + "debug": "^4.1.1", + "deepmerge": "^4.2.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "@types/puppeteer": "*", + "puppeteer": "*", + "puppeteer-core": "*" + }, + "peerDependenciesMeta": { + "@types/puppeteer": { + "optional": true + }, + "puppeteer": { + "optional": true + }, + "puppeteer-core": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz", + "integrity": "sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==", + "dependencies": { + "@types/debug": "^4.1.0", + "debug": "^4.1.1", + "merge-deep": "^3.0.1" + }, + "engines": { + "node": ">=9.11.2" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-stealth": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz", + "integrity": "sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==", + "dependencies": { + "debug": "^4.1.1", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-preferences": "^2.4.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz", + "integrity": "sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^10.0.0", + "puppeteer-extra-plugin": "^3.2.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer-extra-plugin-user-preferences": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz", + "integrity": "sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==", + "dependencies": { + "debug": "^4.1.1", + "deepmerge": "^4.2.2", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-data-dir": "^2.4.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, + "node_modules/randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dependencies": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/randombytes": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz", + "integrity": "sha512-lDVjxQQFoCG1jcrP06LNo2lbWp4QTShEXnhActFBwYuHprllQV6VUpwreApsYqCgD+N1mHoqJ/BI/4eV4R2GYg==" + }, + "node_modules/randomstring": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.3.0.tgz", + "integrity": "sha512-gY7aQ4i1BgwZ8I1Op4YseITAyiDiajeZOPQUbIq9TPGPhUm5FX59izIaOpmKbME1nmnEiABf28d9K2VSii6BBg==", + "dependencies": { + "randombytes": "2.0.3" + }, + "bin": { + "randomstring": "bin/randomstring" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "optional": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "node_modules/sharp/node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.1.0.tgz", + "integrity": "sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==", + "dependencies": { + "@sigstore/bundle": "^2.1.0", + "@sigstore/protobuf-specs": "^0.2.1", + "@sigstore/sign": "^2.1.0", + "@sigstore/tuf": "^2.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/streamx": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", + "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tuf-js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.1.0.tgz", + "integrity": "sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==", + "dependencies": { + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/typed-emitter": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-1.4.0.tgz", + "integrity": "sha512-weBmoo3HhpKGgLBOYwe8EB31CzDFuaK7CCL+axXhUYhn4jo6DSkHnbefboCF5i4DQ2aMFe0C/FdTWcPdObgHyg==" + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/uint4": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uint4/-/uint4-0.1.2.tgz", + "integrity": "sha512-lhEx78gdTwFWG+mt6cWAZD/R6qrIj0TTBeH5xwyuDJyswLNlGe+KVlUPQ6+mx5Ld332pS0AMUTo9hIly7YsWxQ==" + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/urban-dictionary": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/urban-dictionary/-/urban-dictionary-3.0.2.tgz", + "integrity": "sha512-hoYevSg6JNr8NiYRtxz7sqBDBu4RL52Bd45L2jQQ44Rwrz6ACmnKnRcUkH2TIQRILN+viZMT/MYYU3OyBz68AA==", + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utif2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", + "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==", + "dependencies": { + "pako": "^1.0.11" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uuid-1345": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uuid-1345/-/uuid-1345-1.0.2.tgz", + "integrity": "sha512-bA5zYZui+3nwAc0s3VdGQGBfbVsJLVX7Np7ch2aqcEWFi5lsAEcmO3+lx3djM1npgpZI8KY2FITZ2uYTnYUYyw==", + "dependencies": { + "macaddress": "^0.5.1" + } + }, + "node_modules/uuid-by-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/uuid-by-string/-/uuid-by-string-4.0.0.tgz", + "integrity": "sha512-88ZSfcSkN04juiLqSsuyteqlSrXNFdsEPzSv3urnElDXNsZUXQN0smeTnh99x2DE15SCUQNgqKBfro54CuzHNQ==", + "dependencies": { + "js-md5": "^0.7.3", + "js-sha1": "^0.6.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vec3": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/vec3/-/vec3-0.1.8.tgz", + "integrity": "sha512-LfKrP625Bsg/Tj52YdYPsHmpsJuo+tc6fLxZxXjEo9k2xSspKlPvoYTHehykKhp1FvV9nm+XU3Ehej5/9tpDCg==" + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/vm2": { + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", + "deprecated": "The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.", + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/vm2-fixed": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/vm2-fixed/-/vm2-fixed-0.0.1.tgz", + "integrity": "sha512-OR6xu/sntqL1/q0smSvdyYvRUuO4WtCnCGTfgvcDSYCTMGw74UeKyuGrhpIHDez4Kzag/3ebJg8GWk2X9bYPJQ==", + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==" + }, + "node_modules/weather-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/weather-js/-/weather-js-2.0.0.tgz", + "integrity": "sha512-vM7BUa+QUOu4mW48Gdnqe6HRPFpBkNy0gjKvnOHwYpbdylvJorIG5+EjUVaf2SmWrkE0Je1tfsJG+pWQBEs16g==", + "dependencies": { + "request": "2.x.x", + "xml2js": "0.4.x" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wikipedia": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/wikipedia/-/wikipedia-2.1.1.tgz", + "integrity": "sha512-l3lG6ieLTPoHfFEQ1KBJsY7MTEBiP+IJnKZO8ZFgUNA1StBMr4CKTKYw1Oxz2VmN0gUVVnm1MXt/WCm47YnxbQ==", + "dependencies": { + "axios": "^1.4.0", + "infobox-parser": "^3.6.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wunderground-api": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/wunderground-api/-/wunderground-api-1.1.4.tgz", + "integrity": "sha512-gykypGb3KXPYG3AzYfecWIdYAhHnN1+Xw6DWUdQ1k4cbgIkXSaFAnjvfcClDKaSpscdR4Ga/vPt7HjvzjMP2SQ==", + "dependencies": { + "request": "^2.44.0" + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yggdrasil": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/yggdrasil/-/yggdrasil-1.7.0.tgz", + "integrity": "sha512-QBIo5fiNd7688G3FqXXYGr36uyrYzczlNuzpWFy2zL3+R+3KT2lF+wFxm51synfA3l3z6IBiGOc1/EVXWCYY1Q==", + "dependencies": { + "node-fetch": "^2.6.1", + "uuid": "^8.2.0" + } + }, + "node_modules/yggdrasil/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..04fec97 --- /dev/null +++ b/package.json @@ -0,0 +1,39 @@ +{ + "dependencies": { + "@npmcli/arborist": "^7.2.0", + "@npmcli/metavuln-calculator": "^7.0.0", + "@tonejs/midi": "^2.0.28", + "@vitalets/google-translate-api": "^9.2.0", + "axios": "^1.5.1", + "chromium": "^3.0.3", + "color-convert": "^2.0.1", + "cowsay2": "^2.0.4", + "discord.js": "^14.12.1", + "dotenv": "^16.3.1", + "isolated-vm": "^4.6.0", + "minecraft-data": "^3.46.2", + "minecraft-protocol": "^1.44.0", + "minecraft-protocol-forge": "^1.0.0", + "mineflayer": "^4.14.0", + "mineflayer-cmd": "^1.1.3", + "moment-timezone": "^0.5.43", + "node_characterai": "^1.1.3", + "node_characterai_edited": "^1.1.5", + "node-weatherunderground": "^1.2.0", + "openweather-api-node": "^3.1.2", + "prismarine-chat": "^1.9.1", + "prismarine-nbt": "^2.2.1", + "prismarine-registry": "^1.7.0", + "randomstring": "^1.3.0", + "readline": "^1.3.0", + "sharp": "^0.32.6", + "urban-dictionary": "^3.0.2", + "uuid-by-string": "^4.0.0", + "vec3": "^0.1.8", + "vm2": "^3.9.19", + "vm2-fixed": "^0.0.1", + "weather-js": "^2.0.0", + "wikipedia": "^2.1.1", + "wunderground-api": "^1.1.4" + } +} diff --git a/shutdown.js b/shutdown.js new file mode 100644 index 0000000..e69de29 diff --git a/util/between.js b/util/between.js new file mode 100644 index 0000000..342a396 --- /dev/null +++ b/util/between.js @@ -0,0 +1,7 @@ +function between (min, max) { + return Math.floor( + Math.random() * (max - min) + min + ) +} + +module.exports = between diff --git a/util/blacklist util/auto_deop.js b/util/blacklist util/auto_deop.js new file mode 100644 index 0000000..e69de29 diff --git a/util/blacklist util/auto_mute.js b/util/blacklist util/auto_mute.js new file mode 100644 index 0000000..e69de29 diff --git a/util/blacklist util/list.txt b/util/blacklist util/list.txt new file mode 100644 index 0000000..e69de29 diff --git a/util/escapeMarkdown.js b/util/escapeMarkdown.js new file mode 100644 index 0000000..368a412 --- /dev/null +++ b/util/escapeMarkdown.js @@ -0,0 +1,16 @@ +function escapeMarkdown (text, zwsp) { + let unescaped + let escaped + try { + unescaped = text.replace(/\\(\*|@|_|`|~|\\)/g, '$1') + escaped = unescaped.replace(/(\*|@|_|`|~|\\)/g, zwsp + ? '\u200b\u200b$1' + : '\\$1' + ) + } catch (e) { + return unescaped + } + return escaped +} +//fr +module.exports = { escapeMarkdown } // ohio \ No newline at end of file diff --git a/util/eval_colors.js b/util/eval_colors.js new file mode 100644 index 0000000..98e9498 --- /dev/null +++ b/util/eval_colors.js @@ -0,0 +1,22 @@ +const styles = { + bigint: '\xa76', + boolean: '\xa76', + date: '\xa75', + module: '\xa7n', + name: undefined, + null: '\xa7l', + number: '\xa76', + regexp: '\xa74', + special: '\xa73', + string: '\xa72', + symbol: '\xa72', + undefined: '\xa78' +} + +function stylize (str, styleType) { + const style = styles[styleType] + if (style !== undefined) return `${style}${str}\xa7r` + return str +} + +module.exports = { stylize, styles } diff --git a/util/file-exists.js b/util/file-exists.js new file mode 100644 index 0000000..ddf102e --- /dev/null +++ b/util/file-exists.js @@ -0,0 +1,19 @@ +const fs = require('fs/promises') + +/** + * check if file exists + * @param {String} filepath the file path + * @return {boolean} if file exists true else false + */ +async function fileExists (filepath) { + try { + await fs.access(filepath) + return true + } catch (error) { + if (error.code !== 'ENOENT') throw error + + return false + } +} + +module.exports = fileExists diff --git a/util/files.js b/util/files.js new file mode 100644 index 0000000..c80288f --- /dev/null +++ b/util/files.js @@ -0,0 +1,44 @@ +const fs = require('fs') +const path = require('path') +const CommandError = require('../CommandModules/command_error.js') + +async function inject (bot, options) { + + for (const filename of fs.readdirSync(path.join(__dirname, '../commands'))) { + try { + const command = require(path.join(__dirname, '../commands', filename)) + bot.files.register(command) + + } else { + for (const filename of fs.readdirSync(path.join(__dirname, '../'))) { + try { + const util = require(path.join(__dirname, './util', filename)) + bot.files.register(util) + + } + } +} + +module.exports = inject + /*const fs = require('fs/promises') +const path = require('path') + + +async function loadPlugins (directory) { + const plugins = [] + + for (const filename of await fs.readdir(directory)) { + if (!filename.endsWith('.js')) continue + + const filepath = path.join(directory, filename) + + const plugin = require(filepath) + + plugins.push(plugin) + } + + return plugins +} + +module.exports = loadPlugins +*/