commit 0c11a98275356aa68f1b9fd697301c46fd904cc5 Author: flashwave Date: Tue Sep 6 21:37:53 2022 +0000 Initial import. diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..176a458 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bae9376 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +[Tt]humbs.db +[Dd]esktop.ini +.DS_Store +/public/robots.txt +/private/common.ini diff --git a/README.md b/README.md new file mode 100644 index 0000000..62c2eb9 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Futami Shared Content + +Repository for futami.flashii.net. Contains content and configuration shared by both chat clients. diff --git a/private/common.ini.example b/private/common.ini.example new file mode 100644 index 0000000..ffbf800 --- /dev/null +++ b/private/common.ini.example @@ -0,0 +1,60 @@ +title = Flashii Chat +ping = 30 +sounds = //futami.flashii.net/sounds.json +login = //flashii.net/_sockchat/login +token = //flashii.net/_sockchat/token +emotes = //flashii.net/_sockchat/emotes +eeprom = //eeprom.flashii.net/uploads +uiharu = //uiharu.flashii.net/metadata +avatar = "//flashii.net/assets/avatar/{user:id}?res={resolution}&ver={user:avatar_change}" +profile = "//flashii.net/profile.php?u={user:id}" +kaomoji = //futami.flashii.net/kaomoji.txt +soundtriggers = //futami.flashii.net/soundtriggers.json + +servers[] = //sockchat.flashii.net/ws + +colours[Silver] = 12632256 +colours[Citrine] = 15915065 +colours[Orange] = 16753920 +colours[Pumpkin] = 16741656 +colours[Red] = 16056320 +colours[Crimson] = 12582912 +colours[Ruby] = 14684511 +colours[Amaranth] = 15018832 +colours[Thulite] = 14577569 +colours[Pink] = 16740338 +colours[Purpureus] = 10112686 +colours[Antisia] = 9526403 +colours[Cerulean] = 31655 +colours[Cobalt] = 18347 +colours[Aqua] = 2155775 +colours[Keppel] = 3846302 +colours[Teal] = 34181 +colours[Green] = 34048 +colours[Chartreuse] = 8388352 +colours[Nitrate] = 9817088 +colours[Lilive] = 12632064 +colours[Daive] = 8750336 +colours[Zaffre] = 5288 +colours[Amethyst] = 10053324 +colours[Mauve] = 7757962 +colours[Splatoon Orange] = 16224046 +colours[Splatoon Yellow Orange] = 16702476 +colours[Splatoon Lime Green] = 13758986 +colours[Splatoon Pink] = 16663677 +colours[Splatoon Emerald Green] = 6082651 +colours[Splatoon Teal] = 246221 +colours[Splatoon Blue] = 921830 +colours[Splatoon Violet] = 9570535 +colours[Splatoon Red Orange] = 16272384 +colours[Splatoon Yellow] = 15987540 +colours[Splatoon Mint] = 12579301 +colours[Splatoon Green] = 3916597 +colours[Splatoon Sea Green] = 8058314 +colours[Splatoon Light Blue] = 4492287 +colours[Splatoon Dark Blue] = 1055411 +colours[Splatoon Fuchsia] = 14042568 +colours[Splatoon Neon Green] = 720405 +colours[Splatoon Cyan] = 708094 +colours[Splatoon Neon Orange] = 16750080 +colours[Splatoon Dark Fuchsia] = 11672737 diff --git a/private/sound-library.ini b/private/sound-library.ini new file mode 100644 index 0000000..82026bc --- /dev/null +++ b/private/sound-library.ini @@ -0,0 +1,621 @@ +; AJAX Chat sounds +[ajaxchat:join] +title = "AJAX Chat - User joining" +sources[ogg] = "//static.flash.moe/chat/sounds/default/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/join.mp3" + +[ajaxchat:leave] +title = "AJAX Chat - User leaving" +sources[ogg] = "//static.flash.moe/chat/sounds/default/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/leave.mp3" + +[ajaxchat:error] +title = "AJAX Chat - Error" +sources[ogg] = "//static.flash.moe/chat/sounds/default/~error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/~error.mp3" + +[ajaxchat:server] +title = "AJAX Chat - Server message" +sources[ogg] = "//static.flash.moe/chat/sounds/default/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/chatbot.mp3" + +[ajaxchat:incoming] +title = "AJAX Chat - Incoming message" +sources[ogg] = "//static.flash.moe/chat/sounds/default/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/receive.mp3" + +[ajaxchat:outgoing] +title = "AJAX Chat - Outgoing message" +sources[ogg] = "//static.flash.moe/chat/sounds/default/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/send.mp3" + + +; AIM sounds +[aim:join] +title = "AIM - User joining" +sources[ogg] = "//static.flash.moe/chat/sounds/aim/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/aim/join.mp3" + +[aim:leave] +title = "AIM - User leaving" +sources[ogg] = "//static.flash.moe/chat/sounds/aim/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/aim/leave.mp3" + +[aim:server] +title = "AIM - Server message" +sources[ogg] = "//static.flash.moe/chat/sounds/aim/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/aim/chatbot.mp3" + +[aim:incoming] +title = "AIM - Incoming message" +sources[ogg] = "//static.flash.moe/chat/sounds/aim/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/aim/receive.mp3" + +[aim:outgoing] +title = "AIM - Outgoing message" +sources[ogg] = "//static.flash.moe/chat/sounds/aim/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/aim/send.mp3" + + +; Inkling Girl sounds +[woomy:join] +title = "Inkling Girl - Sqwoomy" +sources[ogg] = "//static.flash.moe/chat/sounds/woomy/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/woomy/join.mp3" + +[woomy:leave] +title = "Inkling Girl - Erewesqwoom" +sources[ogg] = "//static.flash.moe/chat/sounds/woomy/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/woomy/leave.mp3" + +[woomy:error] +title = "Inkling Girl - Wiiiigh" +sources[ogg] = "//static.flash.moe/chat/sounds/woomy/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/woomy/error.mp3" + +[woomy:server] +title = "Inkling Girl - Erewesqwoomy" +sources[ogg] = "//static.flash.moe/chat/sounds/woomy/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/woomy/chatbot.mp3" + +[woomy:incoming] +title = "Inkling Girl - Wimy" +sources[ogg] = "//static.flash.moe/chat/sounds/woomy/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/woomy/receive.mp3" + +[woomy:outgoing] +title = "Inkling Girl - Woomy" +sources[ogg] = "//static.flash.moe/chat/sounds/woomy/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/woomy/send.mp3" + + +; Pictochat sounds +[nds:join] +title = "Pictochat - User joining" +sources[ogg] = "//static.flash.moe/chat/sounds/ds/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/ds/join.mp3" + +[nds:leave] +title = "Pictochat - User leaving" +sources[ogg] = "//static.flash.moe/chat/sounds/ds/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/ds/leave.mp3" + +[nds:error] +title = "Pictochat - Error" +sources[ogg] = "//static.flash.moe/chat/sounds/ds/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/ds/error.mp3" + +[nds:server] +title = "Pictochat - Server message" +sources[ogg] = "//static.flash.moe/chat/sounds/ds/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/ds/chatbot.mp3" + +[nds:incoming] +title = "Pictochat - Incoming message" +sources[ogg] = "//static.flash.moe/chat/sounds/ds/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/ds/receive.mp3" + +[nds:outgoing] +title = "Pictochat - Outgoing message" +sources[ogg] = "//static.flash.moe/chat/sounds/ds/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/ds/send.mp3" + + +; osu! sounds +[osu:join] +title = "osu! - User joining" +sources[ogg] = "//static.flash.moe/chat/sounds/osu/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/osu/join.mp3" + +[osu:leave] +title = "osu! - User leaving" +sources[ogg] = "//static.flash.moe/chat/sounds/osu/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/osu/leave.mp3" + +[osu:error] +title = "osu! - Error" +sources[ogg] = "//static.flash.moe/chat/sounds/osu/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/osu/error.mp3" + +[osu:server] +title = "osu! - Server message" +sources[ogg] = "//static.flash.moe/chat/sounds/osu/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/osu/chatbot.mp3" + +[osu:incoming] +title = "osu! - Incoming message" +sources[ogg] = "//static.flash.moe/chat/sounds/osu/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/osu/receive.mp3" + +[osu:outgoing] +title = "osu! - Outgoing message" +sources[ogg] = "//static.flash.moe/chat/sounds/osu/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/osu/send.mp3" + + +; Windows 2000 sounds +[win2k:join] +title = "Windows 2000/ME - Startup" +sources[ogg] = "//static.flash.moe/chat/sounds/win2k/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win2k/join.mp3" + +[win2k:leave] +title = "Windows 2000/ME - Shutdown" +sources[ogg] = "//static.flash.moe/chat/sounds/win2k/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win2k/leave.mp3" + +[win2k:error] +title = "Windows 2000/ME - Chord" +sources[ogg] = "//static.flash.moe/chat/sounds/win2k/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win2k/error.mp3" + +[win2k:server] +title = "Windows 2000/ME - Tada" +sources[ogg] = "//static.flash.moe/chat/sounds/win2k/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win2k/chatbot.mp3" + +[win2k:incoming] +title = "Windows 2000/ME - Ding" +sources[ogg] = "//static.flash.moe/chat/sounds/win2k/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win2k/receive.mp3" + +[win2k:outgoing] +title = "Windows 2000/ME - Chime" +sources[ogg] = "//static.flash.moe/chat/sounds/win2k/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win2k/send.mp3" + + +; Windows NT 5.0 Beta 2 sounds +[nt5b2:startup] +title = "Windows NT 5.0 Beta 2 - Startup" +sources[ogg] = "//static.flash.moe/chat/sounds/ntstartup/everything.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/ntstartup/everything.mp3" + + +; Windows XP sounds +[winxp:join] +title = "Windows XP - Startup" +sources[ogg] = "//static.flash.moe/chat/sounds/winxp/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/winxp/join.mp3" + +[winxp:leave] +title = "Windows XP - Shutdown" +sources[ogg] = "//static.flash.moe/chat/sounds/winxp/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/winxp/leave.mp3" + +[winxp:error] +title = "Windows XP - Critical stop" +sources[ogg] = "//static.flash.moe/chat/sounds/winxp/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/winxp/error.mp3" + +[winxp:server] +title = "Windows XP - Error" +sources[ogg] = "//static.flash.moe/chat/sounds/winxp/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/winxp/chatbot.mp3" + +[winxp:incoming] +title = "Windows XP - Log On" +sources[ogg] = "//static.flash.moe/chat/sounds/winxp/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/winxp/receive.mp3" + +[winxp:outgoing] +title = "Windows XP - Log Off" +sources[ogg] = "//static.flash.moe/chat/sounds/winxp/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/winxp/send.mp3" + + +; Windows Vista/7 sounds +[win7:join] +title = "Windows Vista/7 - Startup" +sources[ogg] = "//static.flash.moe/chat/sounds/win7/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win7/join.mp3" + +[win7:leave] +title = "Windows Vista/7 - Shutdown" +sources[ogg] = "//static.flash.moe/chat/sounds/win7/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win7/leave.mp3" + +[win7:error] +title = "Windows Vista/7 - Critical stop" +sources[ogg] = "//static.flash.moe/chat/sounds/win7/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win7/error.mp3" + +[win7:server] +title = "Windows Vista/7 - Tada" +sources[ogg] = "//static.flash.moe/chat/sounds/win7/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win7/chatbot.mp3" + +[win7:incoming] +title = "Windows Vista/7 - Hardware inserted" +sources[ogg] = "//static.flash.moe/chat/sounds/win7/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win7/receive.mp3" + +[win7:outgoing] +title = "Windows Vista/7 - Hardware removed" +sources[ogg] = "//static.flash.moe/chat/sounds/win7/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win7/send.mp3" + + +; Windows 8 sounds +[win8:join] +title = "Windows 8 - Startup" +sources[ogg] = "//static.flash.moe/chat/sounds/win8/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win8/join.mp3" + +[win8:leave] +title = "Windows 8 - Log off" +sources[ogg] = "//static.flash.moe/chat/sounds/win8/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win8/leave.mp3" + +[win8:error] +title = "Windows 8 - Critical stop" +sources[ogg] = "//static.flash.moe/chat/sounds/win8/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win8/error.mp3" + +[win8:server] +title = "Windows 8 - System notification" +sources[ogg] = "//static.flash.moe/chat/sounds/win8/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win8/chatbot.mp3" + +[win8:incoming] +title = "Windows 8 - Foreground" +sources[ogg] = "//static.flash.moe/chat/sounds/win8/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win8/receive.mp3" + +[win8:outgoing] +title = "Windows 8 - Background" +sources[ogg] = "//static.flash.moe/chat/sounds/win8/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/win8/send.mp3" + + +; Aizawa Inori sounds +[inori:join] +title = "Aizawa Inori - Welcome Back!" +sources[ogg] = "//static.flash.moe/chat/sounds/inori/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/inori/join.mp3" + +[inori:leave] +title = "Aizawa Inori - See you again soon!" +sources[ogg] = "//static.flash.moe/chat/sounds/inori/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/inori/leave.mp3" + +[inori:error] +title = "Aizawa Inori - System error" +sources[ogg] = "//static.flash.moe/chat/sounds/inori/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/inori/error.mp3" + +[inori:server] +title = "Aizawa Inori - Hey!" +sources[ogg] = "//static.flash.moe/chat/sounds/inori/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/inori/chatbot.mp3" + +[inori:incoming] +title = "Aizawa Inori - Tada!" +sources[ogg] = "//static.flash.moe/chat/sounds/inori/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/inori/receive.mp3" + +[inori:outgoing] +title = "Aizawa Inori - Zhoop!" +sources[ogg] = "//static.flash.moe/chat/sounds/inori/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/inori/send.mp3" + + +; Madobe Nanami sounds +[nanami:join] +title = "Madobe Nanami - Okaeri!" +sources[ogg] = "//static.flash.moe/chat/sounds/nanami/join.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/nanami/join.mp3" + +[nanami:leave] +title = "Madobe Nanami - Matane!" +sources[ogg] = "//static.flash.moe/chat/sounds/nanami/leave.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/nanami/leave.mp3" + +[nanami:error] +title = "Madobe Nanami - System error" +sources[ogg] = "//static.flash.moe/chat/sounds/nanami/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/nanami/error.mp3" + +[nanami:server] +title = "Madobe Nanami - Default Beep" +sources[ogg] = "//static.flash.moe/chat/sounds/nanami/chatbot.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/nanami/chatbot.mp3" + +[nanami:incoming] +title = "Madobe Nanami - Ja jan!" +sources[ogg] = "//static.flash.moe/chat/sounds/nanami/receive.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/nanami/receive.mp3" + +[nanami:outgoing] +title = "Madobe Nanami - Pi po!" +sources[ogg] = "//static.flash.moe/chat/sounds/nanami/send.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/nanami/send.mp3" + + +; Minecraft +[minecraft:door:open] +title = "Minecraft - Door Opening" +sources[ogg] = "//static.flash.moe/sounds/door-open.ogg" +sources[mp3] = "//static.flash.moe/sounds/door-open.mp3" + +[minecraft:door:close] +title = "Minecraft - Door Closing" +sources[ogg] = "//static.flash.moe/sounds/door-close.ogg" +sources[mp3] = "//static.flash.moe/sounds/door-close.mp3" + +[minecraft:door:open-old] +title = "Minecraft - Door Opening (Alpha)" +sources[ogg] = "//static.flash.moe/sounds/door-open-old.ogg" +sources[mp3] = "//static.flash.moe/sounds/door-open-old.mp3" + +[minecraft:door:close-old] +title = "Minecraft - Door Closing (Alpha)" +sources[ogg] = "//static.flash.moe/sounds/door-close-old.ogg" +sources[mp3] = "//static.flash.moe/sounds/door-close-old.mp3" + +[minecraft:nether:enter] +title = "Minecraft - Entering Nether Portal" +sources[ogg] = "//static.flash.moe/sounds/nether.ogg" +sources[mp3] = "//static.flash.moe/sounds/nether.mp3" + + +; Windows Live Messenger +[msn:incoming] +title = "Windows Live Messenger - Incoming message" +sources[ogg] = "//static.flash.moe/sounds/wlm-incoming.ogg" +sources[mp3] = "//static.flash.moe/sounds/wlm-incoming.mp3" + + +; Vinesauce +[vinesauce:escape] +title = "Vinesauce - Escape" +sources[ogg] = "//static.flash.moe/sounds/escape.ogg" +sources[mp3] = "//static.flash.moe/sounds/escape.mp3" + + +; Splatoon +[octo:f:veemo] +title = "Octoling Girl - Veemo" +sources[ogg] = "//static.flash.moe/sounds/veemo.ogg" +sources[mp3] = "//static.flash.moe/sounds/veemo.mp3" + +[squid:m:ngyes] +title = "Inkling Boy - Ngyes" +sources[ogg] = "//static.flash.moe/sounds/ngyes.ogg" +sources[mp3] = "//static.flash.moe/sounds/ngyes.mp3" + +[octo:m:ey-yo] +title = "Octoling Boy - Ey yo" +sources[ogg] = "//static.flash.moe/sounds/ey-yo.ogg" +sources[mp3] = "//static.flash.moe/sounds/ey-yo.mp3" + +[shiokara:greet] +title = "Squid Sisters - Stay Fresh!" +sources[ogg] = "//static.flash.moe/sounds/stay-fresh.ogg" +sources[mp3] = "//static.flash.moe/sounds/stay-fresh.mp3" + + +; Mario +[mario:yahoo] +title = "Mario - YAHOO!" +sources[ogg] = "//static.flash.moe/sounds/mario-yahoo.ogg" +sources[mp3] = "//static.flash.moe/sounds/mario-yahoo.mp3" + +[mario:herewego] +title = "Mario - HERE WE GO!" +sources[ogg] = "//static.flash.moe/sounds/mario-herewego.ogg" +sources[mp3] = "//static.flash.moe/sounds/mario-herewego.mp3" + +[mario:yippee] +title = "Mario - YIPPEE!" +sources[ogg] = "//static.flash.moe/sounds/mario-yippee.ogg" +sources[mp3] = "//static.flash.moe/sounds/mario-yippee.mp3" + +[mario:itsame] +title = "Mario - It'sa me!" +sources[ogg] = "//static.flash.moe/sounds/mario-itsame.ogg" +sources[mp3] = "//static.flash.moe/sounds/mario-itsame.mp3" + + +; Ace Attorney +[aceatt:pw:holdit] +title = "Phoenix Wright - HOLD IT!" +sources[ogg] = "//static.flash.moe/sounds/holdit-pw.ogg" +sources[mp3] = "//static.flash.moe/sounds/holdit-pw.mp3" + +[aceatt:pw:takethat] +title = "Phoenix Wright - TAKE THAT!" +sources[ogg] = "//static.flash.moe/sounds/takethat-pw.ogg" +sources[mp3] = "//static.flash.moe/sounds/takethat-pw.mp3" + +[aceatt:pw:objection] +title = "Phoenix Wright - OBJECTION!" +sources[ogg] = "//static.flash.moe/sounds/objection-pw.ogg" +sources[mp3] = "//static.flash.moe/sounds/objection-pw.mp3" + +[aceatt:wp:objection] +title = "Winston Payne - OBJECTION!" +sources[ogg] = "//static.flash.moe/sounds/objection-wp.ogg" +sources[mp3] = "//static.flash.moe/sounds/objection-wp.mp3" + +[aceatt:mk:objection] +title = "Manfred von Karma - OBJECTION!" +sources[ogg] = "//static.flash.moe/sounds/objection-mk.ogg" +sources[mp3] = "//static.flash.moe/sounds/objection-mk.mp3" + +[aceatt:me:objection] +title = "Miles Edgeworth - OBJECTION!" +sources[ogg] = "//static.flash.moe/sounds/objection-me.ogg" +sources[mp3] = "//static.flash.moe/sounds/objection-me.mp3" + + +; Misc +[touhou:pichuun] +title = "Touhou - Pichuun" +sources[ogg] = "//static.flash.moe/sounds/touhou-death.ogg" +sources[mp3] = "//static.flash.moe/sounds/touhou-death.mp3" + +[misc:explode] +title = "Explosion" +sources[ogg] = "//static.flash.moe/sounds/explode.ogg" +sources[mp3] = "//static.flash.moe/sounds/explode.mp3" + +[dokuro:pipiru] +title = "Mitsukai Dokuro - Pipirupirupirupirupipirupi~" +sources[ogg] = "//static.flash.moe/sounds/dokuro-pipiru.ogg" +sources[mp3] = "//static.flash.moe/sounds/dokuro-pipiru.mp3" + +[kf4:fuckyou] +title = "Kurasha244 - Fuck you" +sources[ogg] = "//static.flash.moe/chat/sounds/aim/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/aim/error.mp3" + +[rogueamp:fuckbitch] +title = "rogueamp - FUCK, BITCH" +sources[ogg] = "//static.flash.moe/chat/sounds/default/error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/error.mp3" + +[mde:hundreddollar] +title = "MDE - ONE HUNDRED DOLLARS" +sources[ogg] = "//static.flash.moe/chat/sounds/default/~~error.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/default/~~error.mp3" + +[drake-josh:intro] +title = "Drake Bell - I Found A Way" +sources[ogg] = "//static.flash.moe/chat/sounds/drake-josh/everything.ogg" +sources[mp3] = "//static.flash.moe/chat/sounds/drake-josh/everything.mp3" + +[noucome:erabe] +title = "Noucome - Erabe" +sources[ogg] = "//static.flash.moe/sounds/erabe.ogg" +sources[mp3] = "//static.flash.moe/sounds/erabe.mp3" + +[misc:ybabstat] +title = "The Lincolnshire Poacher" +sources[ogg] = "//static.flash.moe/sounds/ybabstat.ogg" +sources[mp3] = "//static.flash.moe/sounds/ybabstat.mp3" + +[xbox:achievement] +title = "Xbox 360 - Achievement Unlocked" +sources[ogg] = "//static.flash.moe/sounds/achievement.ogg" +sources[mp3] = "//static.flash.moe/sounds/achievement.mp3" + +[ps3:trophy] +title = "PlayStation 3 - Trophy Unlocked" +sources[ogg] = "//static.flash.moe/sounds/trophy.ogg" +sources[mp3] = "//static.flash.moe/sounds/trophy.mp3" + +[sg:tutturu] +title = "Shiina Mayuri - Tutturu~" +sources[ogg] = "//static.flash.moe/sounds/tuturu.ogg" +sources[mp3] = "//static.flash.moe/sounds/tuturu.mp3" + +[misc:tollbooth] +title = "Toll booth" +sources[ogg] = "//static.flash.moe/sounds/trip-drum.ogg" +sources[mp3] = "//static.flash.moe/sounds/trip-drum.mp3" + +[misc:mynamejeff] +title = "My name Jeff" +sources[ogg] = "//static.flash.moe/sounds/jeff.ogg" +sources[mp3] = "//static.flash.moe/sounds/jeff.mp3" + +[hl1:scienceteam] +title = "Half Life 1 - I'm with the science team!" +sources[ogg] = "//static.flash.moe/sounds/science-team.ogg" +sources[mp3] = "//static.flash.moe/sounds/science-team.mp3" + +[misc:wbrb] +title = "We'll Be Right Back" +sources[ogg] = "//static.flash.moe/sounds/wbrb.ogg" +sources[mp3] = "//static.flash.moe/sounds/wbrb.mp3" + +[misc:runaway] +title = "Carly Ray Jepsen - Run Away" +sources[ogg] = "//static.flash.moe/sounds/run-away.ogg" +sources[mp3] = "//static.flash.moe/sounds/run-away.mp3" + +[unreal:holyshit] +title = "Unreal Tournament - Holy Shit" +sources[ogg] = "//static.flash.moe/sounds/holy-shit.ogg" +sources[mp3] = "//static.flash.moe/sounds/holy-shit.mp3" + +[hl1:stop] +title = "Half Life 1 - STOP!" +sources[ogg] = "//static.flash.moe/sounds/stahp.ogg" +sources[mp3] = "//static.flash.moe/sounds/stahp.mp3" + +[misc:op] +title = "op" +sources[ogg] = "//static.flash.moe/sounds/op.ogg" +sources[mp3] = "//static.flash.moe/sounds/op.mp3" + +[misc:pegi3] +title = "Pegi 3" +sources[ogg] = "//static.flash.moe/sounds/pegi-3.ogg" +sources[mp3] = "//static.flash.moe/sounds/pegi-3.mp3" + +[misc:pegi7] +title = "Pegi 7" +sources[ogg] = "//static.flash.moe/sounds/pegi-7.ogg" +sources[mp3] = "//static.flash.moe/sounds/pegi-7.mp3" + +[misc:pegi12] +title = "Pegi 12" +sources[ogg] = "//static.flash.moe/sounds/pegi-12.ogg" +sources[mp3] = "//static.flash.moe/sounds/pegi-12.mp3" + +[misc:pegi16] +title = "Pegi 16" +sources[ogg] = "//static.flash.moe/sounds/pegi-16.ogg" +sources[mp3] = "//static.flash.moe/sounds/pegi-16.mp3" + +[misc:pegi18] +title = "Pegi 18" +sources[ogg] = "//static.flash.moe/sounds/pegi-18.ogg" +sources[mp3] = "//static.flash.moe/sounds/pegi-18.mp3" + +[mikoto:demo] +title = "Misaka Mikoto - Demo" +sources[ogg] = "//static.flash.moe/sounds/demo.ogg" +sources[mp3] = "//static.flash.moe/sounds/demo.mp3" + +[misc:padoru] +title = "PADORU PADORU" +sources[ogg] = "//static.flash.moe/sounds/padoru.ogg" +sources[mp3] = "//static.flash.moe/sounds/padoru.mp3" + +[misc:yuh] +title = "Death Grips - YUH" +sources[ogg] = "//static.flash.moe/sounds/yuh.ogg" +sources[mp3] = "//static.flash.moe/sounds/yuh.mp3" + +[obrado:stoptalking] +title = "Obrado - Stop talking" +sources[ogg] = "//static.flash.moe/sounds/stop-talking.ogg" +sources[mp3] = "//static.flash.moe/sounds/stop-talking.mp3" + +[misc:vegemitesandwich] +title = "Men at Work - Vegemite Sandwich" +sources[opus] = "//static.flash.moe/sounds/vegemite-sandwich.opus" +sources[caf] = "//static.flash.moe/sounds/vegemite-sandwich.caf" diff --git a/private/sound-packs.ini b/private/sound-packs.ini new file mode 100644 index 0000000..4c47cb3 --- /dev/null +++ b/private/sound-packs.ini @@ -0,0 +1,139 @@ +; AJAX Chat +[ajax-chat] +title = "AJAX Chat" +events[join] = ajaxchat:join +events[leave] = ajaxchat:leave +events[error] = rogueamp:fuckbitch +events[server] = ajaxchat:server +events[incoming] = ajaxchat:incoming +events[outgoing] = ajaxchat:outgoing + +; AIM +[aim] +title = "AIM" +events[join] = aim:join +events[leave] = aim:leave +events[error] = kf4:fuckyou +events[server] = aim:server +events[incoming] = aim:incoming +events[outgoing] = aim:outgoing + +; Inkling Girl +[woomy] +title = "woomy" +events[join] = woomy:join +events[leave] = woomy:leave +events[error] = woomy:error +events[server] = woomy:server +events[incoming] = woomy:incoming +events[outgoing] = woomy:outgoing + +; Pictochat +[nds] +title = "Pictochat" +events[join] = nds:join +events[leave] = nds:leave +events[error] = nds:error +events[server] = nds:server +events[incoming] = nds:incoming +events[outgoing] = nds:outgoing + +; osu! +[osu] +title = "osu!" +events[join] = osu:join +events[leave] = osu:leave +events[error] = osu:error +events[server] = osu:server +events[incoming] = osu:incoming +events[outgoing] = osu:outgoing + +; Windows 2000/ME +[win2k] +title = "Windows 2000/ME" +events[join] = win2k:join +events[leave] = win2k:leave +events[error] = win2k:error +events[server] = win2k:server +events[incoming] = win2k:incoming +events[outgoing] = win2k:outgoing + +; Windows XP +[winxp] +title = "Windows XP" +events[join] = winxp:join +events[leave] = winxp:leave +events[error] = winxp:error +events[server] = winxp:server +events[incoming] = winxp:incoming +events[outgoing] = winxp:outgoing + +; Windows Vista/7 +[win7] +title = "Windows Vista/7" +events[join] = win7:join +events[leave] = win7:leave +events[error] = win7:error +events[server] = win7:server +events[incoming] = win7:incoming +events[outgoing] = win7:outgoing + +; Windows 8 +[win8] +title = "Windows 8" +events[join] = win8:join +events[leave] = win8:leave +events[error] = win8:error +events[server] = win8:server +events[incoming] = win8:incoming +events[outgoing] = win8:outgoing + +; Aizawa Inori +[inori] +title = "Aizawa Inori" +events[join] = inori:join +events[leave] = inori:leave +events[error] = inori:error +events[server] = inori:server +events[incoming] = inori:incoming +events[outgoing] = inori:outgoing + +; Madobe Nanami +[nanami] +title = "Madobe Nanami" +events[join] = nanami:join +events[leave] = nanami:leave +events[error] = nanami:error +events[server] = nanami:server +events[incoming] = nanami:incoming +events[outgoing] = nanami:outgoing + +; Tada +[tada] +title = "Tada" +events[join] = win2k:server +events[leave] = win2k:server +events[error] = win2k:server +events[server] = win2k:server +events[incoming] = win2k:server +events[outgoing] = win2k:server + +; Windows NT 5.0 Beta 2 +[ntstartup] +title = "Windows NT 5.0 Beta 2" +events[join] = nt5b2:startup +events[leave] = nt5b2:startup +events[error] = nt5b2:startup +events[server] = nt5b2:startup +events[incoming] = nt5b2:startup +events[outgoing] = nt5b2:startup + +; Drake and Josh +[drake-josh] +title = "Drake and Josh" +events[join] = drake-josh:intro +events[leave] = drake-josh:intro +events[error] = drake-josh:intro +events[server] = drake-josh:intro +events[incoming] = drake-josh:intro +events[outgoing] = drake-josh:intro diff --git a/private/text-triggers.ini b/private/text-triggers.ini new file mode 100644 index 0000000..ddb238f --- /dev/null +++ b/private/text-triggers.ini @@ -0,0 +1,240 @@ +[snd-escape] +type = sound +volume = 1.8 +sounds[] = vinesauce:escape +match[] = "lc; has:escape" + +[snd-erabe] +type = sound +sounds[] = noucome:erabe +match[] = "lc; has:erabe" + +[snd-ybabstat] +type = sound +sounds[] = misc:ybabstat +match[] = "lc; has:space robots" + +[snd-veemo] +type = sound +volume = 1.2 +sounds[] = octo:f:veemo +match[] = "lc; has:veemo" + +[snd-ey-yo] +type = sound +volume = 1.2 +sounds[] = octo:m:ey-yo +match[] = "lc; has:ey yo; hasnot:hey you" + +[snd-ngyes] +type = sound +sounds[] = squid:m:ngyes +match[] = "lc; has:ngyes" + +[snd-shiokara] +type = sound +sounds[] = shiokara:greet +match[] = "lc; has:stay fresh" + +[snd-woomy] +type = sound +sounds[] = woomy:outgoing +match[] = "lc; has:woomy" + +[snd-achievement] +type = sound +volume = 1.2 +sounds[] = xbox:achievement +match[] = "lc; has:achievement" + +[snd-trophy] +type = sound +volume = 1.2 +sounds[] = ps3:trophy +match[] = "lc; has:trophy" + +[snd-tutturu] +type = sound +sounds[] = sg:tutturu +match[] = "lc; has:tutturu" +match[] = "lc; has:tuturu" + +[snd-tollbooth] +type = sound +sounds[] = misc:tollbooth +match[] = "lc; has:tollbooth" +match[] = "lc; has:toll booth" + +[snd-jeff] +type = sound +volume = 1.4 +sounds[] = misc:mynamejeff +match[] = "lc; has:jeff" +match[] = "lc; has:geoff" + +[snd-windefender] +type = sound +volume = 1.2 +sounds[] = win8:server +match[] = "has:Windows Defender" + +[snd-scienceteam] +type = sound +volume = 0.9 +sounds[] = hl1:scienceteam +match[] = "lc; is:i'm with the science team" +match[] = "lc; is:i am with the science team" +match[] = "lc; is:i'm with the science team!" +match[] = "lc; is:i am with the science team!" + +[snd-booyah] +type = alias +for[] = woomy +for[] = ngyes +for[] = veemo +for[] = ey yo +match[] = "lc; is:booyah" + +[snd-wbrb] +type = sound +volume = 1.2 +sounds[] = misc:wbrb +match[] = "lc; is:we'll be right back" + +[snd-runaway] +type = sound +volume = 0.9 +sounds[] = misc:runaway +match[] = "lc; is:run away" + +[snd-holyshit] +type = sound +volume = 1.2 +sounds[] = unreal:holyshit +match[] = "lc; is:holy shit" + +[snd-hlstop] +type = sound +sounds[] = hl1:stop +match[] = "lc; is:stop" +match[] = "lc; is:stahp" + +[snd-op] +type = sound +sounds[] = misc:op +match[] = "is:op" + +[snd-pegi3] +type = sound +sounds[] = misc:pegi3 +match[] = "lc; is:pegi 3" + +[snd-pegi7] +type = sound +sounds[] = misc:pegi7 +match[] = "lc; is:pegi 7" + +[snd-pegi12] +type = sound +sounds[] = misc:pegi12 +match[] = "lc; is:pegi 12" + +[snd-pegi16] +type = sound +sounds[] = misc:pegi16 +match[] = "lc; is:pegi 16" + +[snd-pegi18] +type = sound +sounds[] = misc:pegi18 +match[] = "lc; is:pegi 18" + +[snd-demo] +type = sound +sounds[] = mikoto:demo +match[] = "is:demo" + +[snd-padoru] +type = sound +volume = 0.8 +sounds[] = misc:padoru +match[] = "is:PADORU PADORU" + +[snd-mario-yahoo] +type = sound +volume = 1.2 +sounds[] = mario:yahoo +match[] = "is:YAHOO" +match[] = "is:YAHOO!" + +[snd-mario-herewego] +type = sound +volume = 1.2 +sounds[] = mario:herewego +match[] = "is:HERE WE GO" +match[] = "is:HERE WE GO!" + +[snd-mario-yippee] +type = sound +volume = 1.2 +sounds[] = mario:yippee +match[] = "is:YIPPEE" +match[] = "is:YIPPEE!" +match[] = "is:YIPPIE" +match[] = "is:YIPPIE!" + +[snd-mario-itsame] +type = sound +volume = 1.2 +sounds[] = mario:itsame +match[] = "starts:ITSA ME" +match[] = "starts:IT'SA ME" +match[] = "starts:IT'S A ME" + +[snd-mario-itsame-toilet] +type = sound +volume = 1.2 +rate = 0.6 +sounds[] = mario:itsame +match[] = "lc; is:mario has logged in." + +[snd-aceatt-pw-holdit] +type = sound +volume = 1.2 +sounds[] = aceatt:pw:holdit +match[] = "is:HOLD IT" +match[] = "is:HOLD IT!" + +[snd-aceatt-pw-takethat] +type = sound +volume = 1.2 +sounds[] = aceatt:pw:takethat +match[] = "is:TAKE THAT" +match[] = "is:TAKE THAT!" + +[snd-aceatt-pw-objection] +type = sound +volume = 1.2 +sounds[] = aceatt:pw:objection +sounds[] = aceatt:wp:objection +sounds[] = aceatt:mk:objection +sounds[] = aceatt:me:objection +match[] = "is:OBJECTION" +match[] = "is:OBJECTION!" + +[snd-yuh] +type = sound +volume = 0.8 +rate = rng +sounds[] = misc:yuh +match[] = "is:YUH" + +[snd-stoptalking] +type = sound +sounds[] = obrado:stoptalking +match[] = "lc; is:stop talking" + +[snd-vegemitesandwich] +type = sound +sounds[] = misc:vegemitesandwich +match[] = "lc; is:vegemite sandwich" diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..71e3ffc --- /dev/null +++ b/public/index.php @@ -0,0 +1,231 @@ + 'audio/ogg', + 'ogg' => 'audio/ogg', + 'mp3' => 'audio/mpeg', + 'caf' => 'audio/x-caf', + 'wav' => 'audio/wav', +]); + +header('X-Powered-By: Futami'); +header('Cache-Control: max-age=86400, must-revalidate'); +header('Access-Control-Allow-Origin: *'); + +$reqMethod = (string)filter_input(INPUT_SERVER, 'REQUEST_METHOD'); +if($reqMethod === 'OPTIONS') { + http_response_code(204); + header('Access-Control-Allow-Methods: OPTIONS, GET'); + header('Access-Control-Allow-Headers: Cache-Control'); + return; +} + +if($reqMethod !== 'HEAD' && $reqMethod !== 'GET') { + http_response_code(405); + return; +} + +function json_out($data): void { + header('Content-Type: application/json; charset=utf-8'); + echo json_encode($data); + exit; +} + +function match_etag($eTag): void { + if(filter_input(INPUT_SERVER, 'HTTP_IF_NONE_MATCH') === $eTag) { + http_response_code(304); + exit; + } +} +function gen_etag(string $user, string $data): string { + return sprintf('W/"%s-%s"', hash('sha1', $data), $user); +} +function gen_etag_file(string $user, string $path): string { + return gen_etag($user, hash_file('sha1', $path)); +} +function etag(string $etag): void { + match_etag($etag); + header('ETag: ' . $etag); +} +function etag_data(string $user, string $data): void { + etag(gen_etag($user, $data)); +} +function etag_file(string $user, string $path): void { + etag(gen_etag_file($user, $path)); +} + +$reqPath = '/' . trim(parse_url((string)filter_input(INPUT_SERVER, 'REQUEST_URI'), PHP_URL_PATH), '/'); + +if($reqPath === '/common.json') { + $commonPath = FTM_PATH_PRV . '/common.ini'; + etag_file('common', $commonPath); + + $common = parse_ini_file($commonPath, false, INI_SCANNER_TYPED); + + $colours = $common['colours']; + $common['colours'] = []; + foreach($colours as $n => $c) + $common['colours'][] = compact('n', 'c'); + + json_out($common); +} + +if($reqPath === '/sounds.json') { + $sndLibData = file_get_contents(FTM_PATH_PRV . '/sound-library.ini'); + $sndPackData = file_get_contents(FTM_PATH_PRV . '/sound-packs.ini'); + + etag_data('sounds', $sndLibData . $sndPackData); + + $sndLib = parse_ini_string($sndLibData, true, INI_SCANNER_TYPED); + $sndPacks = parse_ini_string($sndPackData, true, INI_SCANNER_TYPED); + + $library = []; + foreach($sndLib as $name => $info) { + $sources = []; + foreach($info['sources'] as $type => $path) { + $sources[] = [ + 'format' => FTM_LEGACY_SOUND_TYPE[$type], + 'url' => $path, + ]; + } + + $library[] = [ + 'id' => $name, + 'name' => $info['title'], + 'sources' => $sources, + ]; + } + + $packs = []; + foreach($sndPacks as $name => $info) { + $packs[] = [ + 'id' => $name, + 'name' => $info['title'], + 'events' => $info['events'], + ]; + } + + json_out(compact('library', 'packs')); +} + +if($reqPath === '/soundtriggers.json') { + $textTriggersPath = FTM_PATH_PRV . '/text-triggers.ini'; + etag_file('soundtriggers', $textTriggersPath); + + $textTriggers = parse_ini_file($textTriggersPath, true, INI_SCANNER_TYPED); + $sndLib = parse_ini_file(FTM_PATH_PRV . '/sound-library.ini', true, INI_SCANNER_TYPED); + $soundTrigs = []; + + foreach($textTriggers as $triggerInfo) { + if($triggerInfo['type'] !== 'sound' && $triggerInfo['type'] !== 'alias') + continue; + + $soundTrig = []; + + if($triggerInfo['type'] === 'sound') { + $sounds = []; + + foreach($triggerInfo['sounds'] as $soundName) { + if(!isset($sndLib[$soundName])) + continue; + + $sound = []; + $libSound = $sndLib[$soundName]; + + if(isset($libSound['sources']['mp3'])) + $sound['m'] = $libSound['sources']['mp3']; + if(isset($libSound['sources']['ogg'])) + $sound['o'] = $libSound['sources']['ogg']; + if(isset($libSound['sources']['opus'])) + $sound['o'] = $libSound['sources']['opus']; + if(isset($libSound['sources']['caf'])) + $sound['c'] = $libSound['sources']['caf']; + + if(empty($sound)) + continue; + + if(isset($triggerInfo['volume'])) { + $sound['v'] = ceil(($triggerInfo['volume'] - 1) * 100); + $sound['v2'] = $triggerInfo['volume']; + } + + if(isset($triggerInfo['rate'])) + $sound['r'] = $triggerInfo['rate']; + + $sounds[] = $sound; + } + + $soundTrig['s'] = $sounds; + } elseif($triggerInfo['type'] === 'alias') { + $soundTrig['f'] = $triggerInfo['for']; + } + + $matches = []; + foreach($triggerInfo['match'] as $match) { + $filters = []; + $value = null; + $notValue = null; + + $parts = explode(';', $match); + foreach($parts as $part) { + $part = explode(':', trim($part)); + + switch($part[0]) { + case 'lc': + $filters[] = 'lower'; + break; + case 'is': + $filters[] = 'exact'; + $value = trim($part[1]); + break; + case 'starts': + $filters[] = 'starts'; + $value = trim($part[1]); + break; + case 'has': + $filters[] = 'contains'; + $value = trim($part[1]); + break; + case 'hasnot': + $notValue = trim($part[1]); + break; + default: + $filters[] = 'missing:' . $part[0]; + break; + } + } + + $matchNew = ['t' => implode(':', $filters)]; + if($value !== null) + $matchNew['m'] = $value; + if($notValue !== null) + $matchNew['n'] = $notValue; + + $matches[] = $matchNew; + } + $soundTrig['t'] = $matches; + + $soundTrigs[] = $soundTrig; + } + + json_out([ + 'meta' => [ + 'baseUrl' => '', + ], + 'triggers' => $soundTrigs, + ]); +} + +if($reqPath === '/' || $reqPath === '/index.html' || $reqPath === '/index.php') { + header('Content-Type: text/html; charset=utf-8'); + echo << + Data and settings shared between both chat clients is stored on this subdomain. + HTML; + return; +} + +http_response_code(404); diff --git a/public/kaomoji.txt b/public/kaomoji.txt new file mode 100644 index 0000000..3c8d592 --- /dev/null +++ b/public/kaomoji.txt @@ -0,0 +1,428 @@ +¢‿¢ +©¿© o +ª{•̃̾_•̃̾}ª +¬_¬ +¯\(º_o)/¯ +¯\(º o)/¯ +¯\_(⊙︿⊙)_/¯ +¯\_(ツ)_/¯ +°ω° +°Д° +°‿‿° +°ﺑ° +´ ▽ ` )ノ +¿ⓧ_ⓧﮌ +Ò,ó +ó‿ó +ô⌐ô +ôヮô +ŎםŎ +ŏﺡó +ʕ•̫͡•ʔ +ʕ•ᴥ•ʔ +ʘ‿ʘ +˚•_•˚ +˚⌇˚ +˚▱˚ +̿ ̿̿'̿'\̵͇̿̿\=(•̪●)=/̵͇̿̿/'̿̿ ̿ ̿ ̿ +͡° ͜ʖ ͡° +Σ ◕ ◡ ◕ +Σ (゚Д゚;) +Σ(゚Д゚;≡;゚д゚) +Σ(゚Д゚ ) +Σ(||゚Д゚) +Φ,Φ +δﺡό +σ_σ +д_д +ф_ф +щ(゚Д゚щ) +щ(ಠ益ಠщ) +щ(ಥДಥщ) +Ծ_Ծ +أ‿أ +ب_ب +ح˚௰˚づ +ح˚ᆺ˚ว +حᇂﮌᇂ) +٩๏̯͡๏۶ +٩๏̯͡๏)۶ +٩◔̯◔۶ +٩(×̯×)۶ +٩(̾●̮̮̃̾•̃̾)۶ +٩(͡๏̯͡๏)۶ +٩(͡๏̯ ͡๏)۶ +٩(ಥ_ಥ)۶ +٩(•̮̮̃•̃)۶ +٩(●̮̮̃•̃)۶ +٩(●̮̮̃●̃)۶ +٩(。͡•‿•。)۶ +٩(-̮̮̃•̃)۶ +٩(-̮̮̃-̃)۶ +۞_۞ +۞_۟۞ +۹ↁﮌↁ +۹⌤_⌤۹ +॓_॔ +१✌◡✌५ +१|˚–˚|५ +ਉ_ਉ +ଘ_ଘ +இ_இ +ఠ_ఠ +రృర +ಠ¿ಠi +ಠ‿ಠ +ಠ⌣ಠ +ಠ╭╮ಠ +ಠ▃ಠ +ಠ◡ಠ +ಠ益ಠ +ಠ益ಠ +ಠ︵ಠ凸 +ಠ , ಥ +ಠ.ಠ +ಠoಠ +ಠ_ృ +ಠ_ಠ +ಠ_๏ +ಠ~ಠ +ಡ_ಡ +ತಎತ +ತ_ತ +ಥдಥ +ಥ‿ಥ +ಥ⌣ಥ +ಥ◡ಥ +ಥ﹏ಥ +ಥ_ಥ +ಭ_ಭ +ರ_ರ +ಸ , ໖ +ಸ_ಸ +ക_ക +อ้_อ้ +อ_อ +โ๏௰๏ใ ื +๏̯͡๏﴿ +๏̯͡๏ +๏̯͡๏﴿ +๏[-ิิ_•ิ]๏ +๏_๏ +໖_໖ +༺‿༻ +ლ(´ڡ`ლ) +ლ(́◉◞౪◟◉‵ლ) +ლ(ಠ益ಠლ) +ლ(╹◡╹ლ) +ლ(◉◞౪◟◉‵ლ) +ლ,ᔑ•ﺪ͟͠•ᔐ.ლ +ᄽὁȍ ̪ őὀᄿ +ᕕ( ᐛ )ᕗ +ᕙ(⇀‸↼‶)ᕗ +ᕦ(ò_óˇ)ᕤ +ᶘ ᵒᴥᵒᶅ +‘︿’ +•▱• +•✞_✞• +•ﺑ• +•(⌚_⌚)• +•_•) +‷̗ↂ凸ↂ‴̖ +‹•.•› +‹› ‹(•¿•)› ‹› +‹(ᵒᴥᵒ­­­­­)› +‹(•¿•)› +ↁ_ↁ +⇎_⇎ +∩(︶▽︶)∩ +∩( ・ω・)∩ +≖‿≖ +≧ヮ≦ +⊂•⊃_⊂•⊃ +⊂⌒~⊃。Д。)⊃ +⊂(◉‿◉)つ +⊂(゚Д゚,,⊂⌒`つ +⊙ω⊙ +⊙▂⊙ +⊙▃⊙ +⊙△⊙ +⊙︿⊙ +⊙﹏⊙ +⊙0⊙ +⊛ठ̯⊛ +⋋ō_ō` +━━━ヽ(ヽ(゚ヽ(゚∀ヽ(゚∀゚ヽ(゚∀゚)ノ゚∀゚)ノ∀゚)ノ゚)ノ)ノ━━━ +┌∩┐(◕_◕)┌∩┐ +┌( ಠ_ಠ)┘ +┌( ಥ_ಥ)┘ +╚(•⌂•)╝ +╭╮╭╮☜{•̃̾_•̃̾}☞╭╮╭╮ +╭✬⌢✬╮ +╮(─▽─)╭ +╯‵Д′)╯彡┻━┻ +╰☆╮ +□_□ +►_◄ +◃┆◉◡◉┆▷ +◉△◉ +◉︵◉ +◉_◉ +○_○ +●¿●\ ~ +●_● +◔̯◔ +◔ᴗ◔ +◔ ⌣ ◔ +◔_◔ +◕ω◕ +◕‿◕ +◕◡◕ +◕ ◡ ◕ +◖♪_♪|◗ +◖|◔◡◉|◗ +◘_◘ +◙‿◙ +◜㍕◝ +◪_◪ +◮_◮ +☁ ☝ˆ~ˆ☂ +☆¸☆ +☉‿⊙ +☉_☉ +☐_☐ +☜ق❂Ⴢ❂ق☞ +☜(⌒▽⌒)☞ +☜(゚ヮ゚☜) +☜-(ΘLΘ)-☞ +☝☞✌ +☮▁▂▃▄☾ ♛ ◡ ♛ ☽▄▃▂▁☮ +☹_☹ +☻_☻ +☼.☼ +☾˙❀‿❀˙☽ +♀ح♀ヾ +♥‿♥ +♥╣[-_-]╠♥ +♥╭╮♥ +♥◡♥ +✌♫♪˙❤‿❤˙♫♪✌ +✌.ʕʘ‿ʘʔ.✌ +✌.|•͡˘‿•͡˘|.✌ +✖‿✖ +✖_✖ +❐‿❑ +⨀_⨀ +⨀_Ꙩ +⨂_⨂ +〆(・∀・@) +《〠_〠》 +【•】_【•】 +〠_〠 +〴⋋_⋌〵 +の� �の +ニガー? ━━━━━━(゚∀゚)━━━━━━ ニガー? +ペ㍕˚\ +ヽ(´ー` )ノ +ヽ(๏∀๏ )ノ +ヽ(`Д´)ノ +ヽ(o`皿′o)ノ +ㅎ_ㅎ +ヽ(`Д´)ノ +乂◜◬◝乂 +凸ಠ益ಠ)凸 +句_句 +Ꙩ⌵Ꙩ +Ꙩ_Ꙩ +ꙩ_ꙩ +Ꙫ_Ꙫ +ꙫ_ꙫ +ꙮ_ꙮ +흫_흫 +句_句 +﴾͡๏̯͡๏﴿ +¯\(ºдಠ)/¯ +(·×·) +(⌒Д⌒) +(╹ェ╹) +(♯・∀・)⊃ +( ´∀`)☆ +( ´∀`) +(゜Д゜) +(・∀・) +(・A・) +(゚∀゚) +( ̄へ ̄) +( ´☣///_ゝ///☣`) +( つ Д `) +_☆( ´_⊃`)☆_ +。◕‿‿◕。 +。◕ ‿ ◕。 +!⑈ˆ~ˆ!⑈ +!(`・ω・。) +(¬‿¬) +(¬▂¬) +(¬_¬) +(°ℇ °) +(°∀°) +(´ω`) +(´◉◞౪◟◉) +(´ヘ`;) +(´・ω・`) +(´ー`) +(ʘ‿ʘ) +(ʘ_ʘ) +(˚இ˚) +(͡๏̯͡๏) +(ΘεΘ;) +(ι´Д`)ノ +(Ծ‸ Ծ) +(॓_॔) +(० ्०) +(ு८ு_ .:) +(ಠ‾ಠ) +(ಠ‿ʘ) +(ಠ‿ಠ) +(ಠ⌣ಠ) +(ಠ益ಠ ╬) +(ಠ益ಠ) +(ಠ_ృ) +(ಠ_ಠ) +(ಥ﹏ಥ) +(ಥ_ಥ) +(๏̯͡๏ ) +(ღ˘⌣˘ღ) ♫・*:.。. .。.:*・ +(ღ˘⌣˘ღ) +(ᵔᴥᵔ) +(•ω•) +(•‿•) +(•⊙ω⊙•) +(• ε •) +(∩▂∩) +(∩︵∩) +(≧ω≦) +(∪ ◡ ∪) +(≧ω≦) +(≧◡≦) +(≧ロ≦) +(⊙ヮ⊙) +(⊙_◎) +(⋋▂⋌) +(⌐■_■) +(─‿‿─) +(┛◉Д◉)┛┻━┻ +(╬ಠ益ಠ) +(╥_╥) +(╬◣д◢) +(╬ ಠ益ಠ) +(╯°□°)╯︵ ┻━┻ +(╯ಊ╰) +(╯◕_◕)╯ +(╯︵╰,) +(╯3╰) +(╯_╰) +(╹◡╹)凸 +(▰˘◡˘▰) +(●´ω`●) +(●´∀`●) +(◑‿◐) +(◑◡◑) +(◕‿◕✿) +(◕‿◕) +(◕‿-) +(◕︵◕) +(◕ ^ ◕) +(◕_◕) +(◜௰◝) +(◡‿◡✿) +(◣_◢) +(☞゚∀゚)☞ +(☞゚ヮ゚)☞ +(☞゚ ∀゚ )☞ +(☼◡☼) +(☼_☼) +(✌゚∀゚)☞ +(✖╭╮✖) +(✪㉨✪) +(✿◠‿◠) +(✿ ♥‿♥) +( ・∀・) +( ・ัω・ั)? +( ゚∀゚)o彡゜えーりんえーりん!! +(。・_・。) +(つд`) +(づ。◕‿‿◕。)づ +(ノಠ益ಠ)ノ彡┻━┻ +(ノ ◑‿◑)ノ +(ノ_・。) +(・∀・ ) +(屮゚Д゚)屮 +(︶ω︶) +(︶︹︺) +(ﺧ益ﺨ) +(;一_一) +(`・ω・´)” +(。◕‿‿◕。) +(。◕‿◕。) +(。◕ ‿ ◕。) +(。♥‿♥。) +(。・ω..・)っ +(・ェ-) +(ノ◕ヮ◕)ノ*:・゚✧ +(゚Д゚) +(゚Д゚)y─┛~~ +(゚∀゚) +(゚ヮ゚) +( ̄□ ̄) +( ̄。 ̄) +( ̄ー ̄) +( ̄(エ) ̄) +( °٢° ) +( ´_ゝ`) +( ͡° ͜ʖ ͡°) +( ͡~ ͜ʖ ͡°) +( ಠ◡ಠ ) +( •_•)>⌐■-■ +(  ゚,_ゝ゚) +( ・ิз・ิ) +( ゚д゚)、 +( ^▽^)σ)~O~) +((((゜д゜;)))) +(*´д`*) +(*..Д`) +(*..д`*) +(*~▽~) +(-’๏_๏’-) +(-_- )ノ +(/◔ ◡ ◔)/ +(///_ಥ) +(;´Д`) +(=ω=;) +(=゜ω゜) +(>'o')> ♥ <('o'<) +(n˘v˘•)¬ +(o´ω`o) +(V)(°,,°)(V) +(\/) (°,,°) (\/) +(^▽^) +(`・ω・´) +(~ ̄▽ ̄)~ +/╲/\╭ºoꍘoº╮/\╱\ +<【☯】‿【☯】> += (゚д゚)ウ +@_@ +d(*⌒▽⌒*)b +o(≧∀≦)o +o(≧o≦)o +q(❂‿❂)p +y=ー( ゚д゚)・∵. +\˚ㄥ˚\ +\ᇂ_ᇂ\ +\(ಠ ὡ ಠ )/ +\(◕ ◡ ◕\) +^̮^ +^ㅂ^ +_(͡๏̯͡๏)_ +{´◕ ◡ ◕`} +{ಠ_ಠ}__,,|, +{◕ ◡ ◕} \ No newline at end of file